iOS8上的iPhone界面方向

Posted

技术标签:

【中文标题】iOS8上的iPhone界面方向【英文标题】:iPhone Interface Orientation on iOS8 【发布时间】:2014-07-23 09:51:18 【问题描述】:

我已经尝试这样做了 2 周,只是发现它不起作用的原因:

已弃用的 API

以下 API 已弃用:

界面方向的 UIViewController 方法和属性。如Unified Storyboards for Universal Apps 中所述,特征和大小类替换它们。

From what's new in ios 8

我需要的是:FirstViewController,即rootViewController 到我的navigationControllerFristViewController 应该在纵向模式下可用(永远不会在横向模式下显示)。

然后导航堆栈中有一些中间 ViewControllers(支持两个方向),直到我到达 LastViewController,它应该在 LandscapeRight 模式下可用(永远不会在肖像或其他模式)。

我一直在尝试使用以下 CustomNavigationController,但显然 iOS8 中的情况发生了变化,我无法让它工作:

- (BOOL)shouldAutorotate  // Available in iOS 6.0 and later
    return YES; //  // May use topViewController's, but in this app it always returns YES


- (NSUInteger)supportedInterfaceOrientations  // Available in iOS 6.0 and later
    if (self.topViewController != nil)
        return [self.topViewController supportedInterfaceOrientations];
    else
        return [super supportedInterfaceOrientations];


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation  // Available in iOS 6.0 and later
    if (self.topViewController != nil)
        return [self.topViewController preferredInterfaceOrientationForPresentation];
    else
        return [super preferredInterfaceOrientationForPresentation];

谢谢!

【问题讨论】:

我将标题从设备方向更改为界面方向 - 设备方向包括您不关心的“面朝上”和“面朝下”等内容 感谢您的编辑/评论! :) 【参考方案1】:

您遇到的问题与 iOS 8 无关。请注意以下几点:

您误解了有关已弃用内容的说明。只有名称为 willRotate 的方法才会被弃用,而且无论如何您都不会使用它们。

supportedInterfaceOrientations 的工作方式没有任何改变。不过,请务必使用 beta 4 进行测试,因为 beta 1-3 中有一个错误会阻止呈现的视图控制器方向正常工作。

“然后导航堆栈中有一些中间 ViewControllers(支持两个方向),直到我到达 LastViewController,它应该只在 LandscapeRight 中可用”......这是不可能的,但不是因为iOS 8。您所描述的内容自 iOS 6 以来一直是非法的!您不能为导航堆栈中的不同视图控制器设置不同的强制方向。 只有呈现的视图控制器可以强制旋转(正如我在此处和许多其他答案中解释的那样:https://***.com/a/21616025/341994)。

【讨论】:

【参考方案2】:

在导航堆栈中的每个视图控制器中适当地实现- (NSUInteger)supportedInterfaceOrientations。 UINavigationController 支持的方向无关紧要。它应该尊重其显示的视图控制器支持的方向。

还要确保在目标的“常规 -> 部署信息”配置部分中检查了所有必要的方向。

【讨论】:

以上是关于iOS8上的iPhone界面方向的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 界面方向反转?

错误的iOS8状态栏?

iPhone 上的景观方向无法正常工作

iOS界面布局设计

willRotateTo 界面方向在通用主从应用程序中不起作用

将旋转到 iOS 8 上未调用的界面方向