iOS >> 设备方向 >> 屏幕不支持倒置

6

我有一个支持设备方向的屏幕。

除了当我把设备颠倒(Home键在顶部)时旋转不起作用(它卡在最后一次横向设置上),其他都正常工作。

我知道需要更新几个地方来支持这个:

  • 在VC本身中,我添加了以下方法:

enter image description here

  • 在项目目标中,我更新如下:

enter image description here

  • 在Storyboard VC场景中,我更新如下:

enter image description here

这里我漏掉了什么吗?


请查看以下链接:https://dev59.com/4V4c5IYBdhLWcg3wyM0B#33411646 - Fattie
3个回答

11

你还需要在当前主视图控制器的每个父视图控制器中允许旋转到所有方向。比如,如果你的视图控制器在导航控制器中,可以尝试子类化并覆盖与示例中相同的方法。

编辑:正如@JordanC提到的那样,自iOS 7起,你可以实现UINavigationControllerDelegate方法来返回自定义支持的方向:

- (UIInterfaceOrientationMask)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController

4
是的,我猜这只适用于 iPhone 上的倒置模式,因为默认情况下导航控制器不支持该模式。 - Tricertops
顺便说一句,如果我的导航栈上有几个视图控制器,我希望第一个不可旋转(而后面的可以) - 似乎一旦我子类化了UINavigationController并将其设置为可旋转,我就无法将其子VC设置为不接受旋转。有什么想法吗? - Ohad Regev
@OhadRegev 我认为这是不可能的。尝试重写导航控制器的 supportedInterfaceOrientations 方法,以返回其 topViewController 支持的方向。但是,这并不能防止在非法方向下弹出到第一个视图控制器。我唯一看到的解决方案是,在前一个 VC 不支持当前方向时禁用“返回”按钮。 - Tricertops
1
如果存在UITabBarController,请注意您还需要对该类进行子类化并覆盖 - (UIInterfaceOrientationMask) supportedInterfaceOrientations {} 方法(除了UINavigationController之外)。 - eGanges
您不再需要子类化导航控制器。您可以将您的VC设置为代理,并实现 - (UIInterfaceOrientationMask)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController 方法。 - JordanC

1
正如 @eGanges 所提到的,关键点可能是对您的 UITabBarController 进行子类化(并覆盖 supportedInterfaceOrientations),如果这是您的初始视图控制器,则在这种情况下,这是您应该子类化的唯一控制器(当然,您应该将所有支持的界面方向添加到您的应用程序 Info.plist 文件的 UISupportedInterfaceOrientations 键中)。

0
你在真实设备上测试过吗?
无论如何,试试这个:
- (NSUInteger)supportedInterfaceOrientations {
    return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown);
}

UIInterfaceOrientationMaskAll 表示也包括这些。 - rckoenes
好的,我已经在真实设备上测试过了,它还是有同样的问题。另外,我也尝试了你建议的方法(使用 | 运算符),但这里也不行... - Ohad Regev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接