需要有关 viewDidLayoutSubviews 的帮助

Need assistance regarding viewDidLayoutSubviews

有关 viewDidLayoutSubviews 的 Apple 文档说:

When the bounds change for a view controller's view, the view adjusts the positions of its subviews and then the system calls this method. However, this method being called does not indicate that the individual layouts of the view's subviews have been adjusted. Each subview is responsible for adjusting its own layout.

Your view controller can override this method to make changes after the view lays out its subviews. The default implementation of this method does nothing.

我有 view1 其中包含 view2 意味着 view2view1 的子视图。我正在为我的 view2 创建一个 CALayer,我希望它是 view2 的精确大小。我正在使用 auto layouts,所以我想在 auto layout 完成工作时创建 CALayer,这样我就可以为 CALayer 帧设置正确的值。

但是在 viewDidLayoutSubviews 方法中,我无法检测到 auto layout 确切设置 view2 帧的时间,因为 Apple 文档也说

this method being called does not indicate that the individual layouts of the view's subviews have been adjusted.

在那之后苹果文档说

Your view controller can override this method to make changes after the view lays out its subviews.

我很困惑 auto layout 将在什么时候设置 view2 帧,因此我可以相应地设置我的 CALayer 帧。

正如我在评论中提到的,如果您的视图与自动布局对齐,则无需执行任何特殊操作。如果您希望单个图层将其边界调整为视图的边界,最简单和正确的方法是重写视图的 layerClass 方法 - 在这种情况下,图层边界将在视图内自动调整。如果除了标准层之外还需要一层,更新层边界的最佳位置可能是 setFrame: 方法覆盖。

viewDidLayoutSubviews 开始,这只是一个通知您的事件,viewcontroller 的根视图的所有子视图都位于所需位置。您不能保证这些子视图的所有其余子视图也将对齐,因为这是父视图本身的责任。它们既可以是自动布局定位的,也可以是手动布局定位的。此事件也不保证所有视图都按需要显示,特别是如果它们的帧更改是动画的。