1

我有一个视图控制器,我希望它只以纵向显示,所以我在 iOS 6 中做了以下操作:

-(BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

但是,当我旋转设备时,它仍然会变成横向。知道在哪里可以检查这个吗?我放了一个断点,它命中了supportedInterfaceOrientations,但它仍然旋转

4

3 回答 3

4

你有导航控制器吗?iOS6 决定什么可以自动旋转的方式已经改变。它正确地为您的视图控制器询问supportedInterfaceOrientations,但它可能向您的导航堆栈层次结构中的另一个元素询问“shouldAutorotate”并接受该答案。如果您的 navigationController/tabviewController 对此问题返回“是”,则它不会咨询您的视图控制器。

于 2012-10-10T18:37:34.460 回答
2

您还应该在应用委托中提供应用支持的方向:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    return UIInterfaceOrientationMaskPortrait;
}

确保正确添加根视图控制器(不将其添加为子视图),但使用以下内容:

[window setRootViewController:myVC];

此外,如果您的视图控制器位于 a 内UINavigationController,则应将此类别用于导航控制器:

@implementation UINavigationController (autorotate)

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

@end

在 iOS 6 中,只有最顶层全屏控制器的根视图控制器会被询问旋转。这包括UINavigationController,这个类不询问它的视图控制器,它直接响应。Apple 现在建议子类化UINavigationController以覆盖supportedInterfaceOrientations's输出。

于 2012-10-10T18:42:56.160 回答
0

确保您的项目设置和 info.plist仅选择纵向,因为检查支持的方向时,它们的优先级高于应用程序委托

于 2013-01-09T08:23:12.210 回答