ios - 在 iOS 7 中处理界面旋转

标签 ios objective-c uiviewcontroller autolayout autoresizingmask

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

UIViewController 中,我 99% 的处理用户从纵向到横向或反之亦然的处理都使用自动布局。效果很好。但有时,出于某种原因,我仍然不得不依赖框架。

我该如何最好地处理这个问题?

您有 willAnimateRotationToInterfaceOrientationwillRotateToInterfaceOrientation、带有检查状态栏的 NSNotification 方法,我相信还有其他方法。

如果我想在用户旋转时更改 View 的位置,我应该在哪种方法中更改框架?最好使用简单的 setFrame: 还是我应该使用自动调整掩码?

最佳答案

从 iOS6 开始,您不应该使用 willRotateToInterfaceOrientation:didRotateFromInterfaceOrientation:。这些仅在最前面呈现的 View Controller 上调用,不会在其他 View Controller 上调用。这意味着如果您有推送 View Controller 或呈现 View Controller ,则所有其他 View Controller 都不会正确布局。

相反,您应该始终使用 viewWillLayoutviewDidLayout 来处理旋转。它们都在动画 block 中调用,因此您所做的任何可动画化的操作都将被动画化。

对于定位 View ,您可以自己设置框架,也可以使用自动布局约束并在 viewDidLayout 中调整约束。如果你走自动布局路线,永远不要删除和添加约束。尽可能使用相同的约束并调整它们的 constant 值。

关于ios - 在 iOS 7 中处理界面旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995246/

相关文章:

ios - 如何控制阴影扩散和模糊?

ios - 如何使用 Alamofire 5.0.0-beta.3 (Swift 5) 上传图片(Multipart)

ios - 从 UIViewController 中关闭 UITabBArController,然后再次呈现它仍然显示旧数据 - 已更新

iphone - iOS 7 结束点NavigationBar在viewController坐标中

Swift - 在 UITableViewController 中通过 Storyboard 显示一个带有空列表的复杂 View

ios - 自定义 UITableViewCell : programmatically trigger selection segue

ios - CoreML 初始化失败 : MTLTextureDescriptor has width greater than the maximum allowed size

ios - WatchKit 应用程序连接问题

iphone - self 是一个指针吗?

ios - 不使用自动布局的约束?