我们有一个带有tableView的MainViewController,它提供了一个新的modalViewController。
MainViewController仅限于纵向,modalViewController可以旋转。
问题出在iOS8中,当modalViewController旋转时,MainViewcontroller中iOS8中的旋转回调方法被调用 - - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
因此,UITableView正在重新加载其数据,这是我们不想要的行为。
我们可以阻止iOS 8的此功能,而不是旋转呈现的UIViewController吗?
答案 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
中保存对其的引用,则可以覆盖shouldAutorotate
和supportedInterfaceOrientations
值。