我们如何在iOS 8中指定应用程序方向?

时间:2014-06-28 04:22:08

标签: ios8

在iOS 7中我们说:

// ViewController1:

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

-(BOOL)shouldAutorotate {
    return YES;
}

// ViewController2, presented by modal segue from button in ViewController1

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate {
    return YES;
}

结果是应用程序在视图控制器1中以横向显示,在视图控制器2中以纵向显示。

该代码在iOS 7中运行良好,包括Xcode 6中的iOS 7模拟器。但它在iOS 8中不再有效。有两个问题:

  • View Controller 1的视图以横向显示,但模拟器不会自动旋转(可能只是模拟器错误)和(这是非常重要的部分)视图不会自动调整大小,因此屏幕太窄(右边有一个黑色的大区域)。

  • 视图控制器2的视图与视图控制器1的视图(横向,而不是纵向)的方向相同。

因此视图控制器视图不会自动调整大小以填充屏幕,并且所呈现的视图控制器支持的方向不受尊重。

那么我们现在应该如何做呢?它与特质集合有关吗?首选内容大小?手动设置状态栏方向?

2 个答案:

答案 0 :(得分:14)

第一部分(启动到横向)的答案与iOS 7相同:一切都取决于Info.plist文件中可能的方向顺序。所以,让我们说View Controller 1这样说:

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

如果在Info.plist支持的界面方向中首先出现横向方向,我们将连贯地启动到横向:

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
    <string>UIInterfaceOrientationPortrait</string>
</array>

iOS 8中一个值得注意的变化是,默认情况下,当我们处于横向状态时,状态栏会被隐藏。但是,如果需要,您可以使用适当的覆盖来防止这种情况:

-(BOOL)prefersStatusBarHidden {
    return NO;
}

我没有回答我的问题的第二部分,即如何在呈现视图控制器时强制旋转。正如我在this answer中所解释的那样,我的感觉是,在iOS 8中,这将变得不可能。您的视图控制器和您的视图应该能够适应&#34; - 你也是。

编辑:看起来在种子4中强制应用旋转视图控制器演示/解雇的能力正在恢复!

答案 1 :(得分:0)

问题可能出在您的* .plist文件

检查并确定要将屏幕的默认/首次启动方向列为

支持的界面方向:

项目0横向(右主页按钮)

第1项肖像(底部主页按钮)

在我最终检查Xcode中的全局搜索工作UIInterface之前,我追了几天这个“bug”,并注意到我列出了我的游戏不支持的方向(整个游戏是100%正确的景观)

我摆脱了Landscape Left,这是GameCenter启动旋转到Landscape Left的原因,如果我将设备保持在横向左方向物理上。

问题解决了。