我有一个UIViewController
,它以模态方式呈现(全屏),我想在该视图中禁用自动旋转。我不想将它限制为横向或纵向,只是希望它保持原来呈现的任何方向。在iOS 7上禁用单个呈现ViewController的自动旋转
在iOS 6上是足够的,只是覆盖的方法:
- (BOOL)shouldAutorotate {
return NO;
}
而且这也正是我想要的。然而,在iOS 7上,这似乎没有效果。该方法确实被调用,但返回值似乎被操作系统忽略 - 无论如何它都会自动旋转。
该文档没有提及此方法的任何更改。我如何在iOS 7上实现预期的效果?
编辑:正被呈现的视图控制器(未被推!)通过UINavigationViewController
:
[self.navigationController presentViewController:vc animated:YES completion:nil];
解决方案:
作为奇数,因为它看起来,但是这种解决方案没有公布在关于此主题的众多现有问题。在iOS 7上,似乎UINavigationController
给出的答案是 shouldAutorotate
是操作系统的作用。我们需要子类UINavigationController
来修改其行为。
当处理常规导航堆栈时,仅使用[self.topViewController shouldAutorotate]
就足够了,但是当存在模态视图时,它驻留在self.presentedViewController
中,而不是self.topViewController
。因此,完整的解决方案是这样的:
- (BOOL)shouldAutorotate {
UIViewController *vc;
if (self.presentedViewController) vc = self.presentedViewController;
else vc = [self topViewController];
return [vc shouldAutorotate];
}
iOS7使用视图控制器方法'supportedInterfaceOrientations'控制自转过程,就像早期版本中使用'shouldAutorotateToInterfaceOrientation:'你也可能会遇到的问题,如果你在'UITabController'中展示视图控制器。 –
你的'UIViewController'是否出现在'UINavigationController'中? –
可能的重复http://stackoverflow.com/questions/12520030/how-to-force-a-uiviewcontroller-to-portait-orientation-in-ios-6 –