iPadOS 13 上的屏幕旋转故障

Screen rotation glitch on iPadOS 13

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


问题

描述

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

图片

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

项目

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

谢谢。


编辑:

故障不再发生在 iPadOS 13.2.

我是这样解决的:

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

  • 在 VC1 中:

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        .portrait
    }
    

    同时删除 "hacky solution".

  • 在 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()
}