当父视图本身使用自动布局时,我拥有的特定子 UIView 应该在哪里放置手动布局代码(或在哪里触发它)?
笔记:
- 视图的布局代码需要在任何父视图布局、方向更改、特征更改等之后使用其框架尺寸
- 我曾尝试在父视图控制器上使用 viewWillLayoutSubviews,但在多次调用它时遇到困难 - 无法追查为什么但不想多次手动布局计算,因为它们很繁重。
- 因此,总体而言,对于以下各种场景,最终只有一个手动布局的“触发”,并且在所有旋转和父视图布局完成时:
所以:
- 加载时 (viewDidLoad)
- 重新显示(就像视图随后确实出现了)
- 回转
- 性状改变
例如,我应该寻找一种方法:
a)父视图控制器来控制它并确定何时向我的特定子视图(由它自己的视图控制器前置)发送“layoutSubviewNow”调用,但在这种情况下如何执行此操作,或 b)
b)让子视图对“layoutSubview()”做出反应,然后有一个委托可用于回调主控制器以请求布局数据?或
c) 类似于 b) 但使用子视图视图控制器“viewWillLayoutSubviews()”来触发,然后有一个委托可用于回调主控制器以请求布局数据?
或其他?
其实我在想这个主意:
d) 在主父视图控制器中:有一个实例变量 viewTransistionedOutstandingAction,并使用它以便 (i) 在 viewWillTransition 中将其设置为 true,然后在 (ii) viewWillLayoutSubviews 中执行以下操作:
if viewTransistionedOutstandingAction {
self.triggerModelChange()
viewTransistionedOutstandingAction = false
}