iOS8 – 防止呈现viewController旋转
我们有一个带有tableView的MainViewController,它提供了一个新的modalViewController。
MainViewController仅限于肖像,并且modalViewController可以旋转。
问题是在iOS8中,当modalViewController旋转时,在MainViewcontroller中iOS8中的旋转callback方法被称为- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
因此,UITableView正在重新获得它的数据,这是我们不想要的行为。
我们可以防止iOS 8的这个function,而不是旋转呈现UIViewController?
所以经过漫长的search和调查,我终于想出了一个可能的解决scheme。
首先,我可以使用导航控制器,并推动viewController而不是呈现它,但它打破了我的代码,只是不是如此。
我能做的第二件事情不是设置限制。 我仍然可以使用自动布局,但是如果我不设置约束,并且让默认约束被设置,tableView不会被重载。 当然这也是不是很聪明的事情,因为我在我的viewController中有很多元素。
最后,我发现我可以在另一个UIWindow中显示这个“模态”viewController。 我创buildUIWindow并将其设置为其rootViewController。
我把一些示例项目在git中: https : //github.com/OrenRosen/ModalInWindow
希望这会有帮助。
我做了一个类似的导航控制器,这将不会旋转,除非顶部推动控制器旋转。
在你的情况下,检查主控制器是否提供另一个控制器。 如果不是则拒绝旋转,否则返回呈现的控制器返回的旋转方法。
至于你的表格视图,它不应该因为旋转而重新加载 。
在iOS 8中,更改设备方向时旋转的视图是添加到UIWindow
的第一个视图。 因此,如果您在shouldAutorotate
保存对其的引用,则可以覆盖shouldAutorotate
和supportedInterfaceOrientations
值。