1

我一直在处理 iPadOS 13.1.3 上与设备方向相关的 UI 故障。有什么解决方案或解决方法吗?


问题

描述

让屏幕 A 显示模态屏幕 B。屏幕 A 仅锁定为纵向,屏幕 B 支持所有方向。如果屏幕 A 被显示,然后设备被旋转到横向并且屏幕 B 即将显示,屏幕 A 首先被错误地调整大小,这导致了一个奇怪的故障。

图片

左侧图像是在产生 UI 故障的 iPadOS 13.1.3 上拍摄的。右侧的图像是在安装了 iOS 12.4.1 且布局正确的 iPad 上录制的。所有附加的图像都是下面链接的 github 项目的一部分。

项目

请随时使用存储库仔细查看该问题。

谢谢。


编辑:

iPadOS 13.2 上不再出现该故障。

4

1 回答 1

0

我像这样解决它:

  • 删除您的func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?). 让我们让视图控制器处理这个问题。

  • 在 VC1 中:

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        .portrait
    }
    

    同时删除“hacky解决方案”。

  • 在 VC2 中:

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        .all
    }
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
        .portrait
    }
    

所以我们得到的是 VC2 最初以纵向显示,但随后可以旋转。

如果您希望 VC2 在出现后立即旋转为横向,则添加以下内容:

var appeared = false
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    appeared = true
    UIViewController.attemptRotationToDeviceOrientation()
}
于 2019-10-24T14:55:02.500 回答