需要关于viewDidLayoutSubviews的帮助

关于viewDidLayoutSubviews Apple文档说:

当视图控制器视图的边界发生变化时,视图会调整其子视图的位置,然后系统会调用此方法。 但是, 调用此方法并不表示视图子视图的各个布局已被调整。 每个子视图负责调整自己的布局。

你的视图控制器可以重写这个方法来在视图布局子视图之后进行更改。 这个方法的默认实现什么也不做。

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

但在viewDidLayoutSubviews方法,我无法检测何时完全view2框架由auto layout设置,因为苹果文档也说

这个方法被调用并不表示视图的子视图的个别布局已被调整。

之后,苹果医生说

你的视图控制器可以重写这个方法来在视图布局子视图之后进行更改。

我很困惑什么时候auto layout将设置view2框架,所以我可以相应地设置我的CALayer框架。

正如我在评论中提到的,如果您的视图与自动布局一致,则不必做任何特别的事情。 如果您希望单个图层将视图的边界调整到layerClass ,则最简单且正确的方法是覆盖视图的layerClass方法 – 在这种情况下,图层边界将在视图中自动调整。 如果除了标准层之外还需要一层,更新图层边界的最佳位置可能是setFrame:方法覆盖。

作为viewDidLayoutSubviews ,它只是一个事件通知你,viewcontroller的根视图的所有子视图位于所需的位置。 您不能保证这些子视图的所有其他子视图也将保持一致,因为这是父视图本身的责任。 他们可以既自动布局定位和手动布局定位。 这个事件也不能保证所有的视图都是按照需要显示的,特别是如果它们的帧改变是animation的。