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

Man*_*uel 1 uiviewcontroller uiview autolayout swift

视图(a)包含一个子视图(b),该子视图包含一个文本标签。

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

我仅在视图(a)中获得子视图(b)的正确大小viewDidAppear,而在中没有viewDidLayoutSubviews

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

更新:使用自动布局

Man*_*uel 5

问题是我设置文本标签的文本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
Run Code Online (Sandbox Code Playgroud)

移除后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
Run Code Online (Sandbox Code Playgroud)

  • 良好的侦探工作。为解决您自己的问题而投票。如果我每次触发这样的意外更改时都得一分钱,但是...我也否决了您最初的问题,因为它没有任何代码。对于那个很抱歉。 (2认同)