【发布时间】:2015-09-20 11:41:17
【问题描述】:
关于viewDidLayoutSubviews 的苹果文档说:
当视图控制器视图的边界发生变化时,视图 调整其子视图的位置,然后系统调用它 方法。但是,调用此方法并不表示 视图的子视图的单独布局已调整。每个 subview 负责调整自己的布局。
您的视图控制器可以覆盖此方法以在视图布置其子视图后进行更改。此的默认实现 方法什么都不做。
我有view1,其中包含view2 意味着view2 是view1 的子视图。我正在为我的view2 创建一个CALayer,我希望它的大小与view2 完全相同。我正在使用auto layouts,所以我想在auto layout 完成工作时创建CALayer,这样我就可以为CALayer 框架设置正确的值。
但在viewDidLayoutSubviews 方法中,我无法检测到view2 框架何时由auto layout 设置,因为Apple doc 也这么说
这个方法被调用并不表示个人 视图的子视图布局已调整。
Apple 文档说之后
您的视图控制器可以覆盖此方法以在之后进行更改 视图展示了它的子视图。
我很困惑auto layout 会在什么时候设置view2 框架,所以我可以相应地设置我的CALayer 框架。
【问题讨论】:
-
如果您只需要您的图层自动调整边界 - 只需将
layerClass方法覆盖到您的图层 -
@Sega-Zero 请你提供一个小例子或sn-p,这将非常有帮助。
-
但是我仍然无法弄清楚自动布局何时会完成它的工作,我的特定视图何时会有它的框架以及我何时可以使用框架值(用于任何目的)。
-
viewDidLayoutSubviews是确保视图控制器视图的子视图正确对齐的正确位置,但它不是您可以确定它们相应显示在屏幕上的位置。而且它不是您可以确定根子视图的所有子视图都对齐的地方 - 这是子视图的责任(文档说得很清楚)。通常,使用自动布局,您不需要做任何额外的工作。但是你总是可以覆盖setFrame:方法来捕捉特定视图的正确位置。
标签: ios objective-c uiview autolayout calayer