iOS8 - 阻止在呈现viewController时旋转

时间:2015-02-11 09:47:13

标签: ios uitableview ios8 rotation modalviewcontroller

我们有一个带有tableView的MainViewController,它提供了一个新的modalViewController。

MainViewController仅限于纵向,modalViewController可以旋转。

问题出在iOS8中,当modalViewController旋转时,MainViewcontroller中iOS8中的旋转回调方法被调用 - - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

因此,UITableView正在重新加载其数据,这是我们不想要的行为。

我们可以阻止iOS 8的此功能,而不是旋转呈现的UIViewController吗?

3 个答案:

答案 0 :(得分:12)

经过漫长的搜索和调查,我终于想出了一个可能的解决方案。

首先,我可以使用导航控制器并推送viewController而不是呈现它,但它会破坏我的代码而且不是那么真实。

我能做的第二件事就是不设置约束。我仍然可以使用autolayout,但是如果我没有设置约束,并且设置了默认约束,则tableView不会重新加载。当然,这也不是一件非常聪明的事情,因为我在viewController中有很多元素。

最后,我发现我可以展示这个&#34;模态&#34;另一个UIWindow中的viewController。我创建UIWindow并将modalViewController设置为rootViewController。

我在git中放了一些示例项目: https://github.com/OrenRosen/ModalInWindow

希望它会有所帮助。

答案 1 :(得分:0)

我用导航控制器做了一些similar,除非推顶控制器旋转,否则不会旋转。

在您的情况下,检查主控制器是否正在显示另一个控制器。如果不是那么只是拒绝旋转,否则返回所呈现的控制器为旋转方法返回的任何内容。

至于你的表视图,由于轮换,它不应该重新加载

答案 2 :(得分:0)

在iOS 8中,更改设备方向时旋转的视图是添加到UIWindow的第一个视图。因此,如果您在presentedController中保存对其的引用,则可以覆盖shouldAutorotatesupportedInterfaceOrientations值。