iOS自动布局UIView绘图周期

时间:2015-04-26 04:16:38

标签: ios iphone

在其中一个WWDC视频中,Apple表示布局是从上到下完成的,即从superview到subview(在从下到上计算约束后)。显示也是从上到下完成的。

我的问题是: 1.视图控制器中的哪一点确定了视图的框架(原点和大小)?我试图记录视图的大小(使用自动布局定义),但它总是0 0 0 0,这是奇数,因为视图已经在模拟器中生成;

对于自动调整的视图,view.frame何时可用?

  1. 同样的问题,除了这次它是UIImageView.frame。我尝试登录到控制台,即使大小适合约束,记录的UIImageView框架也是0 0 width_of_original_image height_of_original_image。但对于其他视图(如标签),框架会在控制台上正确打印。
  2. 似乎有一个神秘的自动布局引擎执行转换,没有人知道引擎内部发生了什么,但是要检查模拟器显示器上的内容,以确定该引擎如何呈现视图???

1 个答案:

答案 0 :(得分:6)

这并不神秘。这很简单!将约束视为写在纸上的说明 - 视图。每隔一段时间,它就是布局时间!运行时按顺序从视图中收集纸张并遵守它们 - 因此您最终会得到布局框架。

因此,如果您在布局时间之前检查的大小,那么您会得到错误的答案,因为它还没有发生。

布局时间?每当运行时发送视图layoutSubviews时 - 实际上,运行时服从约束并在 layoutSubviews期间执行布局。您的视图控制器可以使用viewWillLayoutSubviewsviewDidLayoutSubviews之前或之后听到此消息。

我认为最让初学者困惑的部分是当视图控制器出现时会发生什么。 viewDidLoad表示拥有一个视图,但这就是全部;视图和子视图都不在界面中,所以很明显没有布局。相当以后,我们得到viewWillAppear:,视图进入界面,现在我们获得布局。因此,如果您检查尺寸,例如viewDidAppear:,它们就是正确的。