关于viewDidLayoutSubviews
的Apple文档说:
当视图控制器视图的边界发生变化时,视图 调整其子视图的位置,然后系统调用它 方法。但是,调用此方法并不表示该方法 视图的子视图的各个布局已经过调整。每个 subview负责调整自己的布局。
您的视图控制器可以覆盖此方法,以便在视图布局其子视图后进行更改。此默认实现 方法什么都不做。
我的view1
包含view2
,表示view2
是view1
的子视图。我正在为CALayer
创建一个view2
,我希望其大小为view2
。我正在使用auto layouts
,因此我想在CALayer
完成其工作时创建auto layout
,以便为CALayer
框架设置正确的值。
但在viewDidLayoutSubviews
方法中,我无法检测到view2
确切auto layout
帧的设置时间,因为Apple doc也在说
之后,Apple医生说此方法被调用并不表示个人 视图的子视图的布局已经过调整。
您的视图控制器可以覆盖此方法以进行更改 该视图列出了其子视图。
我很困惑auto layout
将设置view2
框架,以便我可以相应地设置我的CALayer
框架。
答案 0 :(得分:2)
正如我在评论中提到的,如果您的视图与自动布局一致,则不必执行任何特殊操作。如果您希望单个图层调整其到视图边界的边界,最简单和正确的方法将是覆盖视图的layerClass
方法 - 在这种情况下,图层边界将在视图中自动调整。如果除了标准图层之外还需要一个图层,更新图层边界的最佳位置可能是setFrame:
方法覆盖。
从viewDidLayoutSubviews
开始,只是一个通知您的事件,即viewcontroller的根视图的所有子视图都位于所需的位置。您无法保证这些子视图的所有其余子视图也将对齐,因为它是父视图本身的责任。它们可以是自动布局定位和手动布局定位。此事件也不保证所有视图都按需显示,尤其是当它们的帧更改已设置动画时。