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 上的屏幕旋转故障的主要内容,如果未能解决你的问题,请参考以下文章