iPadOS 13 上的屏幕旋转故障

Posted

技术标签:

【中文标题】iPadOS 13 上的屏幕旋转故障【英文标题】:Screen rotation glitch on iPadOS 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 中描述)? 【参考方案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()

【讨论】:

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

以上是关于iPadOS 13 上的屏幕旋转故障的主要内容,如果未能解决你的问题,请参考以下文章

防止Android上的屏幕旋转

可以让屏幕上的元素立即旋转

屏幕旋转时,小部件上的按钮单击丢失

如何在本机反应中解锁一个屏幕上的旋转

iOS 上的 LibGDX:使用 Robovm 以编程方式旋转屏幕

处理屏幕旋转上的片段重复(带有示例代码)