我正在学习Auto布局如何在iOS中运行.为此我创建了一个示例单视图应用程序,它有一个视图控制器(初始视图控制器)和一个自定义视图(我们称之为示例视图).我使用自动布局约束将示例视图添加到Main.storyboard中的视图控制器.我在Sample View中添加了一个按钮和一个标签,并带有自动布局约束.我重写了SampleView.m中的layoutSubviews和updateConstraints方法.这些被覆盖的方法只会调用它们的超级实现.我为这两种方法添加了一个断点并开始调试应用程序.以下是我的观察
我发现在SampleView中的layoutSubviews方法之前调用updateConstraints.但是我读了几篇帖子/答案,其中提到在updateConstraints之前调用layoutSubviews.现在我很困惑什么是正确的机制?updateConstraint在layoutSubviews之前调用,反之亦然.自动布局系统如何工作?
当我将设备从纵向旋转到横向或从横向旋转到纵向时,我发现SampleView的updateConstraints方法不会自动调用(但是layoutSubviews方法会自动调用),而我读了一些帖子/答案,说明在旋转时, updateConstraints方法自动调用.我再次混淆哪一个是真的?
如果updateConstrains方法没有在方向更改时自动调用,那么当方向更改时,如何在视图层次结构中的所有视图上调用updateConstraint方法?将在父视图上调用setNeedsUpdateConstraint,是否会在该视图的所有子视图上调用updateConstraint?