Swift:如何在显示子视图之前获取子视图的大小?

时间:2015-10-23 22:11:48

标签: swift uiview uiviewcontroller autolayout

视图(a)包含子视图(b),其中包含文本标签。

文本标签的文本在视图(a)的viewDidLoad中设置。 标签中的文本量会更改子视图(b)的大小。

我只在viewDidAppear视图(a)中获得了正确尺寸的子视图(b),但在viewDidLayoutSubviews中没有。

如何在显示之前在视图(a)的视图控制器中获取子视图(b)的大小?

更新:使用自动布局

1 个答案:

答案 0 :(得分:4)

问题在于,我在layoutIfNeeded期间呼叫viewDidLoad,在之前设置了文字标签的文字。

它强制立即调用viewDidLayoutSubviews,之后不再调用。

这是一个错误的调用序列,包括子视图的帧高度为163.0,故事板上有一个空文本标签,190.5带有文本标签的文本集。

viewDidLoad begin: frame.height: 163.0
viewDidLayoutSubviews: frame.height: 161.5 // should not be called yet
viewDidLoad end: frame.height: 161.5
viewWillAppear: frame.height: 161.5
viewDidAppear: frame.height: 190.5

删除layoutIfNeeded后:

viewDidLoad begin: frame.height: 163.0
viewDidLoad end: frame.height: 163.0
viewWillAppear: frame.height: 163.0
viewDidLayoutSubviews: frame.height: 190.5
viewDidAppear: frame.height: 190.5