非常简单的问题,但我问的是因为似乎有很多相互矛盾的观点,而且我完全无法找到明确的答案,更不用说现代答案了。
在 UIViewController
中,我 99% 的处理用户从纵向到横向或反之亦然的处理都使用自动布局。效果很好。但有时,出于某种原因,我仍然不得不依赖框架。
我该如何最好地处理这个问题?
您有 willAnimateRotationToInterfaceOrientation
、willRotateToInterfaceOrientation
、带有检查状态栏的 NSNotification
方法,我相信还有其他方法。
如果我想在用户旋转时更改 View 的位置,我应该在哪种方法中更改框架?最好使用简单的 setFrame:
还是我应该使用自动调整掩码?
最佳答案
从 iOS6 开始,您不应该使用 willRotateToInterfaceOrientation:
和 didRotateFromInterfaceOrientation:
。这些仅在最前面呈现的 View Controller 上调用,不会在其他 View Controller 上调用。这意味着如果您有推送 View Controller 或呈现 View Controller ,则所有其他 View Controller 都不会正确布局。
相反,您应该始终使用 viewWillLayout
和 viewDidLayout
来处理旋转。它们都在动画 block 中调用,因此您所做的任何可动画化的操作都将被动画化。
对于定位 View ,您可以自己设置框架,也可以使用自动布局约束并在 viewDidLayout
中调整约束。如果你走自动布局路线,永远不要删除和添加约束。尽可能使用相同的约束并调整它们的 constant
值。
关于ios - 在 iOS 7 中处理界面旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995246/