视图(a)包含子视图(b),其中包含文本标签。
文本标签的文本在视图(a)的viewDidLoad
中设置。
标签中的文本量会更改子视图(b)的大小。
我只在viewDidAppear
视图(a)中获得了正确尺寸的子视图(b),但在viewDidLayoutSubviews
中没有。
如何在显示之前在视图(a)的视图控制器中获取子视图(b)的大小?
更新:使用自动布局
答案 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