处理iOS 7中的界面旋转

Dou*_*ith 5 objective-c uiviewcontroller ios autoresizingmask autolayout

非常简单的问题,但我问,因为似乎有很多相互矛盾的观点,我一直无法找到明确的答案,更不用说现代的答案了.

我使用自动布局将99%的用户操作从纵向更改为横向,反之亦然UIViewController.效果很好.但有时候,由于某种原因,我不得不依赖帧.

我怎么能最好地处理这个?

你有willAnimateRotationToInterfaceOrientation,检查状态栏willRotateToInterfaceOrientationNSNotification方法,我相信还有其他一些.

如果我想在用户旋转时更改视图的位置,我应该在哪个方法中更改框架?最好是用简单的方法来做,setFrame:还是应该使用自动修复蒙版?

Leo*_*ica 5

从iOS6开始,你不应该使用willRotateToInterfaceOrientation:didRotateFromInterfaceOrientation:.这些仅在最前面呈现的视图控制器上调用,而不会在其他控件上调用.这意味着如果您有推送的视图控制器或呈现的视图控制器,则所有其他控件将无法正确布局.

相反,您应该始终使用viewWillLayoutviewDidLayout处理旋转.它们都被称为动画块,所以你做的任何可动画的动画都会被动画化.

对于定位视图,您可以自己设置框架,也可以使用自动布局约束并调整约束viewDidLayout.如果您进入自动布局路线,请永远不要删除和添加约束.尽可能使用相同的约束,只需调整它们的constant值.