在 Matthijs Hollemans 的帖子中对自动布局和旋转有很好的解释。你可以在这里找到它:
http ://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2
通常,您需要大约 4 个约束来正确定位您的视图。如果我的视图大小不变,我更喜欢固定高度和宽度。之后,您可以使用前导和顶部空间约束来做任何您想做的事情。例如,您可以为视图的前导和顶部空间约束设置 IBOutlets:
@interface ViewController : UIViewController {
IBOutlet NSLayoutConstraint *_leadingSpaceConstraint;
IBOutlet NSLayoutConstraint *_topSpaceConstraint;
}
然后从出口控制拖动到您的约束。现在您可以直接从代码中更改视图约束:
_leadingSpaceConstraint.constant = NEW_CONSTRAINT_VALUE;
要提交您的更改,您需要调用:
[self.view layoutIfNeeded];
如果你想做动画:
[UIView animateWithDuration:0.25
animations:^{
[self.view layoutIfNeeded];
}];
我认为它将在 willAnimateRotationToInterfaceOrientation 中起作用,因为您不需要使用这种方法打破任何约束。
一些例子:你有两个纵向的方形视图,一个在另一个下面。例如,将他们的“超级视图的前导空间”约束设置为 20。然后将“top space to superview constraint”设置为第一个视图的 20 和第二个视图的 120。这将是我们的默认设置。
然后,旋转后,您需要重新计算约束。现在将两个顶部约束设置为 20,将前导约束分别设置为 20 和 120。然后使用 layoutIfNeeded 提交更改。
我希望它会有所帮助。