iPadOS 13上的屏幕旋转故障

时间:2019-10-23 11:19:39

标签: ios user-interface ipad screen-rotation ipados

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


问题

说明

让我们让屏幕A模态显示屏幕B。屏幕A仅锁定为纵向,屏幕B支持所有方向。如果显示了屏幕A,则将设备旋转到横向,然后将要显示屏幕B,则屏幕A的尺寸首先会错误地调整大小,这将导致更严重的故障。

图片

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

项目

请随时使用this存储库对此问题进行详细了解。

谢谢。


编辑:

在iPadOS 13.2上不再出现故障。

1 个答案:

答案 0 :(得分: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()
}