无法在iPhone X上将界面方向旋转为倒立的纵向方向

5
我们有一个应用程序,使用连接到音频插孔(或iPhone7或更高版本的闪电端口)的附件。它需要在特定方向上运行,具体取决于iOS设备。
目前,在任何iPhone模拟器或实际设备上设置设备方向都没有问题,除了iPhoneX模拟器。
设置方向的当前代码:
- (BOOL)shouldAutorotate {
    return YES;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    //device checks omitted
    return UIInterfaceOrientationMaskPortraitUpsideDown;
}

启用方向的目标设置

堆栈跟踪:

TF uncaught exception reason : Supported orientations has no common orientation with the application, and [RootNavigationController shouldAutorotate] is returning YES
2017-10-05 09:35:02.692945+0200 [65045:74145368] *** Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', reason: 'Supported orientations has no common orientation with the application, and [RootNavigationController shouldAutorotate] is returning YES'

这段代码在 iPhone5、iPhone6、iPhone6+、iPhone7 和 iPhone7+ 上运行良好,并且可以在 iPhone8 模拟器上运行。当前我的 iPhone7 正在运行 iOS11,因此看起来并不是 iOS11 的问题。唯一出现问题的设备是 iPhoneX 模拟器。


在iOS 11.2中,shouldAutorotate不再被调用。所有旧的旋转代码似乎都已经过时了:“自iOS 8以来,所有与旋转相关的方法都已弃用”在UIViewController的文档中。我也很难处理这个问题,试图防止iPhone X旋转。 - RickJansen
1个回答

7
看起来iPhone X将不支持倒置方向;请参见https://forums.developer.apple.com/message/268015。一位苹果员工说,“这是设计上的问题。我们会在未来的版本中更新文档以反映这一点。”
至少在模拟器中你仍然可以收到方向变化通知,但正如你所发现的,如果你采取行动,可能会发生糟糕的事情。在我的情况下,我没有异常,但我的UI不能正确地重新绘制。
我正在添加代码来检测倒置的iPhone X并防止UI重新绘制;它在模拟器中有效,并且我们需要等待看看它是否适用于真实设备(幸运的是,我对于倒置只涉及一个耳机插孔设备,因此iPhone X上失去倒置并不是很重要)。
结果是,我们使用lighting端口传感器的人将无法为iPhone X用户提供与“较低级别”iPhone相同的可用性,至少不需要进行一些非常繁琐的UI操作,包括大量的仿射变换来旋转和/或翻转元素,以使其看起来是倒置的,同时仍符合手机认为它正在做的事情。唉。

1
我猜Apple太懒了,无法想出一种有意义的方式来适应iPhone X的分割状态栏布局,以在没有缺口的屏幕底部显示。 - Nicolas Miari
2
连苹果都做不到这么多吧!View.preservesSuperviewLayoutMargins (iOS8+), layoutMarginsDidChange(iOS8+), VC.layoutMargins(dep.)→View.directionalLayoutMargins(iOS11), VC.viewLayoutMarginsDidChange(iOS11), VC.systemMinimumLayoutMargins(iOS11), VC.viewRespectsSystemMinimumLayoutMargins(iOS11), View.safeAreaInsets(iOS11), insetsLayoutMarginsFromSafeArea(iOS11), VC.viewSafeAreaInsetsDidChange (iOS11), View.safeAreaLayoutGuide(iOS11)。**VC.additionalSafeAreaInsets(iOS11) - 我认输了,不支持iPhoneX倒置!** - Cirec Beback
1
似乎这个“特性”已经被纳入了HIG:https://developer.apple.com/ios/human-interface-guidelines/visual-design/adaptivity-and-layout/...一个只在竖屏模式下运行的应用程序,在用户将设备旋转180度时应该将其内容旋转180度——**除了iPhone X,它不支持倒置的竖屏模式。如果您的应用程序在某人将设备保持在错误的方向时不会自动旋转,他们会本能地知道要旋转它。你不需要告诉他们。很好,这是用户错误。 - Cirec Beback

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