Autolayout和设备定位

时间:2013-12-03 08:52:13

标签: ios iphone autolayout device-orientation auto-rotation

我正在开发supports portrait and landscape modes的应用程序。我正在使用auto layout to arrange my views。正如我阅读了很多帖子,我意识到开发人员通常使用以下方法之一。

1。第一种方法:

实施UIViewController:updateConstraints方法并根据设备方向更新约束。

2。第二种方法:

实施UIViewController:viewWillLayoutSubviews方法并根据设备方向更新约束。

请问有谁可以告诉我最好的使用方法是什么?我一直在寻找一种结合自动旋转和自动布局的最佳实践。感谢。

4 个答案:

答案 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
  

标准视图控制器可能使用此方法来更改   对其管理的观点的约束。