需要有关 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
意味着 view2
是 view1
的子视图。我正在为我的 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 的根视图的所有子视图都位于所需位置。您不能保证这些子视图的所有其余子视图也将对齐,因为这是父视图本身的责任。它们既可以是自动布局定位的,也可以是手动布局定位的。此事件也不保证所有视图都按需要显示,特别是如果它们的帧更改是动画的。
有关 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
意味着 view2
是 view1
的子视图。我正在为我的 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 的根视图的所有子视图都位于所需位置。您不能保证这些子视图的所有其余子视图也将对齐,因为这是父视图本身的责任。它们既可以是自动布局定位的,也可以是手动布局定位的。此事件也不保证所有视图都按需要显示,特别是如果它们的帧更改是动画的。