我正在开发supports portrait and landscape modes
的应用程序。我正在使用auto layout to arrange my views
。正如我阅读了很多帖子,我意识到开发人员通常使用以下方法之一。
1。第一种方法:
实施UIViewController:updateConstraints
方法并根据设备方向更新约束。
2。第二种方法:
实施UIViewController:viewWillLayoutSubviews
方法并根据设备方向更新约束。
请问有谁可以告诉我最好的使用方法是什么?我一直在寻找一种结合自动旋转和自动布局的最佳实践。感谢。
答案 0 :(得分:6)
我会使用这个UIViewController的方法:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;
,然后从那里调用-setNeedsUpdateConstraints
。
如果您需要进行额外的计算或管理违规行为,请添加
- (void)updateViewConstraints
{
[super updateViewConstraints];
// do calculations if needed, like set constants
}
答案 1 :(得分:5)
最好的方法是不使用。而是正确配置约束,以便在旋转时不需要编程更改。自动布局运行时将按照您已指定的方式将视图保持在适当的位置。
除了更改.constant
的值之外更新约束是一个真正的性能损失,应该避免。
不需要使用viewWillLayoutSubviews
。自动布局方法为updateViewConstraints
(对于视图控制器)和updateConstraints
(在视图中)。
答案 2 :(得分:1)
我认为最好的方法是通过检查设备方向来更新-(void)updateViewConstraints
中的约束。无需在setNeedsUpdateConstraints
中调用willAnimateRotationToInterfaceOrientation
,因为当设备方向发生变化时,iOs会自动调用它。谢谢大家的努力。
答案 3 :(得分:0)
for ios8 +
来自以下文件:
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
标准视图控制器可能使用此方法来更改 对其管理的观点的约束。