我有一个viewcontroller,我希望它只能用肖像呈现,所以我在iOS 6中做了以下内容:
-(BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
然而,当我旋转设备时,它仍将其转为横向。知道还有什么地方可以检查吗?我设置了一个断点,它命中supportedInterfaceOrientations
,但它仍然会旋转
答案 0 :(得分:4)
你有导航控制器吗? iOS6确定可以自动旋转的方式已经改变。它正确地询问了您的视图控制器的supportedInterfaceOrientations,但它可能会向导航堆栈层次结构中的另一个元素询问“shouldAutorotate”并接受该答案。如果您的navigationController / tabviewController对此问题返回yes,那么它将不会咨询您的视图控制器。
答案 1 :(得分:2)
您还应该在应用代理中提供应用支持的方向:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return UIInterfaceOrientationMaskPortrait;
}
确保正确添加根视图控制器(不将其添加为子视图),但使用以下内容:
[window setRootViewController:myVC];
此外,如果您的视图控制器位于UINavigationController
内,则应将此类别用于navigationcontroller:
@implementation UINavigationController (autorotate)
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
@end
在iOS 6中,只询问最顶层全屏控制器的根视图控制器是否有旋转。这包括UINavigationController
,这个类不会询问它的视图控制器,它会直接响应。 Apple现在建议将UINavigationController
子类化为覆盖supportedInterfaceOrientations's
输出。
答案 2 :(得分:0)
确保您的项目设置和info.plist 选择仅纵向方向,因为它们在检查支持的方向时具有比应用委托更高的优先级