在iOS8上的iPhone界面方向(iPhone Interface Orientation on

2019-10-20 12:35发布

我一直在尝试2周这样做,只是发现它不工作的原因:

已过时的API

下列API弃用:

该UIViewController的方法和属性的接口方向。 性状和大小班替换它们,如在通用应用程序统一故事板 。

从什么的iOS 8的新功能

我需要的是:一个FirstViewController ,这是rootViewControllernavigationController 。 该FristViewController应该在人像模式(不是永远永远永远显示在景观)可用。

再就是在导航堆栈(支持两个方向)的几个中间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];
}

谢谢!

Answer 1:

您遇到的问题已经没有任何关系与iOS 8.这里有几点需要注意:

  • 你误会什么弃用的说明。 只有像名称的方法willRotate已被弃用,并且不使用他们无论如何。

  • 什么都没有变为如何supportedInterfaceOrientations工作。 请确保您有测试4个测试,不过,因为有在防止正常工作呈现视图控制器方向贝塔1-3的错误。

  • “再就是在导航栈的几个中间ViewControllers(支持两个方向),直到我达到LastViewController,只应在LandscapeRight可用” ......那是不可能的,但不是因为iOS版8.你是什么因为iOS 6的描述已经违法! 你不能在一个导航堆栈不同的视图控制器不同的强迫方向。 只有呈现视图控制器可以强制旋转(因为我已经在这里和许多其他答案解释: https://stackoverflow.com/a/21616025/341994 )。



Answer 2:

实现- (NSUInteger)supportedInterfaceOrientations适当地在每个导航堆叠视图控制器。 这不要紧的UINavigationController支持的方向是什么。 它应该尊重其显示的视图控制器的支撑取向。

另外,还要确保所有必要的方位在你的目标的“通用- >部署信息”检查配置部分。



文章来源: iPhone Interface Orientation on iOS8