iOS 6自动旋转的问题

时间:2012-10-10 18:34:29

标签: iphone objective-c ios ipad

我有一个viewcontroller,我希望它只能用肖像呈现,所以我在iOS 6中做了以下内容:

-(BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

然而,当我旋转设备时,它仍将其转为横向。知道还有什么地方可以检查吗?我设置了一个断点,它命中supportedInterfaceOrientations,但它仍然会旋转

3 个答案:

答案 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 选择纵向方向,因为它们在检查支持的方向时具有比应用委托更高的优先级