【问题标题】:Screen rotation glitch on iPadOS 13iPadOS 13 上的屏幕旋转故障
【发布时间】:2020-02-19 15:10:12
【问题描述】:

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


问题

说明

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

图片

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

项目

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

谢谢。


编辑:

iPadOS 13.2 上不再出现该故障。

【问题讨论】:

  • 录音都是横向拍摄的,只是我没有手动旋转。您的发现很有趣,因为我能够在 iPad 模拟器(运行 iPadOS 13.1)和真正的 iPad 设备(运行 iPadOS 13.1.2 和 13.1.3)上 100% 重现故障,所有这些都使用 Xcode 11.1 (11A1027)。我是横向启动应用程序还是在蓝屏打开时旋转它都没有关系(不是平面,而是真正的横向)。您是否使用相同的配置和步骤来重现(在 repo 中描述)?

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


【解决方案1】:

我是这样解决它的:

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

【讨论】:

  • 谢谢马特!我害怕我将不得不在项目设置中允许更多方向,但它可以在没有任何更改的情况下工作。我也喜欢从细节控制器触发的旋转,即使这引入了旋转动画。标记为已接受的答案,因为这消除了所描述的故障。
猜你喜欢
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多