【发布时间】:2015-07-14 07:25:48
【问题描述】:
我正在学习自动布局在 iOS 中的工作原理。为此,我创建了一个示例单视图应用程序,它具有一个视图控制器(它是初始视图控制器)和一个自定义视图(我们称之为示例视图)。我在 Main.storyboard 的视图控制器中添加了示例视图,并带有自动布局约束。我在带有自动布局约束的示例视图中添加了一个按钮和一个标签。我覆盖了 SampleView.m 中的 layoutSubviews 和 updateConstraints 方法。这些被覆盖的方法除了调用它们的超级实现之外什么都不做。我为这两种方法添加了一个断点并开始调试应用程序。以下是我的观察
我发现在 SampleView 的 layoutSubviews 方法之前调用了 updateConstraints。但是,我阅读了一些帖子/答案,其中提到 layoutSubviews 在 updateConstraints 之前被调用。现在我很困惑什么是正确的机制?在 layoutSubviews 之前调用 updateConstraint,反之亦然。自动布局系统如何工作?
当我将设备从纵向旋转到横向或从横向旋转到纵向时,我发现 SampleView 的 updateConstraints 方法不会自动调用(但是 layoutSubviews 方法会自动调用),而我阅读了一些帖子/答案这表示在轮换时,updateConstraints 方法会自动调用。我再次困惑哪一个是真的?
如果 updateConstrains 方法没有在方向改变时自动调用,那么当方向改变时,我们如何在视图层次结构中的所有视图上调用 updateConstraint 方法?会在父视图上调用 setNeedsUpdateConstraint 吗,会在该视图的所有子视图上调用 updateConstraint 吗?
【问题讨论】:
标签: ios objective-c iphone autolayout ios-autolayout