ios 11 中切换任务时的虚假旋转事件

Spurious rotation events while switching tasks in ios 11

在 iPad.

上使用 4 指任务切换手势切换离开它后,当您 return 时,我的应用程序崩溃了

当用户使用 4 指手势离开我的应用程序时,我在我的应用程序委托中看到 applicationWillResignActive:,然后是 applicationDidEnterBackground:,然后(假设我们当前处于纵向)我的顶级视图控制器获得 viewWillTransitionToSize:withTransitionCoordinator: 的大小指示横向布局(即使设备没有旋转)。这当然会导致针对新方向的大量调整大小和重新排列视图。紧接着我得到 viewWillTransitionToSize:withTransitionCoordinator: 的大小表示纵向(设备的原始方向)。再一次,为了新的(实际上是原始的)方向,我再次检查了所有布局。

我发现,如果我等待所有这些完成,我可以整天打开和关闭我的应用程序。另一方面,如果我在进行这项不必要的工作时切换回我的应用程序,我会在某些 iOS 转换代码中发生崩溃。

在这一点上,我试图理解为什么我会收到这些杂散旋转事件。如果我能避免得到这些,我就可以避免陷入导致崩溃的任何情况。他们似乎没有必要。

我想不出在后台获取 viewWillTransitionToSize 有用或正确的原因,所以如果您 在背景:

if UIApplication.shared.applicationState == .background {
    return
}

不过,这感觉像是一个错误,我认为您应该向 Apple 报告它。

事实证明,没有办法阻止将旋转事件报告给应用程序。我怀疑这是一个 iOS 错误。但是,当应用程序状态为 UIApplicationStateBackground 时忽略 viewWillTransitionToSize:withTransitionCoordinator: 并在视图的 layoutSubviews(如果存在)中执行相同操作使我能够解决该问题。