【问题标题】:How do we dictate app orientation in iOS 8?我们如何在 iOS 8 中指定应用程序方向?
【发布时间】:2014-08-19 06:07:57
【问题描述】:

在 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 的视图以横向显示,但模拟器没有自动旋转(可能只是一个模拟器错误)并且(这是非常重要的部分)视图没有自动调整大小,所以它是屏幕太窄(右侧有一大块黑色区域)。

  • View Controller 2 的视图与 View Controller 1 的视图显示方向相同(横向,而非纵向)。

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

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

【问题讨论】:

标签: ios8


【解决方案1】:

第一部分(横向启动)的答案与 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 中将变得不可能。您的视图控制器和您的视图应该“适应”——你也是。

编辑:看起来在种子 4 中,在视图控制器演示/关闭时强制应用旋转的能力正在回归!

【讨论】:

  • 这种情况怎么办:通用应用。在发布时,我想要 iPad 的横向和 iPhone 的纵向。我该如何在 Info.plist 中处理它?
  • @NikitaP 这很容易设置。有两个 Info.plist 条目描述了允许的旋转,一个用于 iPad,一个用于 iPhone。相应列表中的第一个将是该设备上的初始方向。
  • 很好的发现。预发布文档仍然说默认是 NO developer.apple.com/library/prerelease/iOS/documentation/UIKit/…
【解决方案2】:

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

检查并且您想要的是将屏幕的默认/首次启动方向列为

支持的界面方向:

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

item 1 Portrait(底部主页按钮)

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

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

问题解决了。

【讨论】:

  • 好,肯尼斯,但与我已经给出并接受的答案完全相同 - 我自己的。
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2017-02-23
  • 1970-01-01
相关资源
最近更新 更多