在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的视图(横向,而不是纵向)的方向相同。
因此视图控制器视图不会自动调整大小以填充屏幕,并且所呈现的视图控制器支持的方向不受尊重。
那么我们现在应该如何做呢?它与特质集合有关吗?首选内容大小?手动设置状态栏方向?
答案 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的原因,如果我将设备保持在横向左方向物理上。
问题解决了。