【发布时间】:2017-02-23 02:17:34
【问题描述】:
当父视图本身使用自动布局时,我拥有的特定子 UIView 的手动布局代码(或触发它的位置)应该放在哪里?
注意事项:
- 视图的布局代码需要在任何父视图布局、方向更改、特征更改等之后使用其框架尺寸
- 我曾尝试在父视图控制器上使用 viewWillLayoutSubviews,但在多次调用它时遇到了困难 - 无法找到原因,但不想多次手动布局计算,因为它们很繁重.
- 因此,总体而言,对于以下各种场景,最终只有一次手动布局“触发”,并且在所有旋转和父视图布局都已完成时:
所以:
- 加载时 (viewDidLoad)
- 重新显示(类似视图随后出现)
- 旋转
- 性状变化
例如,我应该寻找一种方法:
a) 父视图控制器来控制它并确定何时向我的特定子视图(由它自己的视图控制器前置)发送“layoutSubviewNow”调用,但在这种情况下如何执行此操作,或者 b)
b) 让子视图对“layoutSubview()”做出反应,然后有一个委托可用于回调主控制器以请求布局数据?或者
c) 与 b) 类似,但使用子视图视图控制器“viewWillLayoutSubviews()”触发,然后有一个委托可用于回调主控制器以请求布局数据?
还是其他?
其实我在想这个主意:
d) 在主父视图控制器中:有一个实例变量 viewTransistionedOutstandingAction,并使用它以便 (i) 在 viewWillTransition 中将其设置为 true,然后在 (ii) viewWillLayoutSubviews 中执行以下操作:
if viewTransistionedOutstandingAction {
self.triggerModelChange()
viewTransistionedOutstandingAction = false
}
【问题讨论】:
-
无论你想实现什么,请用截图或代码块说明。您在上面解释的内容只有您知道自己想要什么结果才能被您理解。简单地说,如果有人选择任何概念性答案,那么它可能对您的问题是错误的。
-
好的。也许是一些伪代码
-
您能简单地告诉我,您希望在控制器中的布局约束发生任何更改后调用一次触发函数吗?这是你想要的吗?
-
差不多,但是在发生方向变化和父布局的时候。然后触发器调用子控制器告诉它进行布局计算。
标签: uiview uiviewcontroller autolayout layoutsubviews viewdidlayoutsubviews