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
(如果存在)中执行相同操作使我能够解决该问题。
在 iPad.
上使用 4 指任务切换手势切换离开它后,当您 return 时,我的应用程序崩溃了当用户使用 4 指手势离开我的应用程序时,我在我的应用程序委托中看到 applicationWillResignActive:
,然后是 applicationDidEnterBackground:
,然后(假设我们当前处于纵向)我的顶级视图控制器获得 viewWillTransitionToSize:withTransitionCoordinator:
的大小指示横向布局(即使设备没有旋转)。这当然会导致针对新方向的大量调整大小和重新排列视图。紧接着我得到 viewWillTransitionToSize:withTransitionCoordinator:
的大小表示纵向(设备的原始方向)。再一次,为了新的(实际上是原始的)方向,我再次检查了所有布局。
我发现,如果我等待所有这些完成,我可以整天打开和关闭我的应用程序。另一方面,如果我在进行这项不必要的工作时切换回我的应用程序,我会在某些 iOS 转换代码中发生崩溃。
在这一点上,我试图理解为什么我会收到这些杂散旋转事件。如果我能避免得到这些,我就可以避免陷入导致崩溃的任何情况。他们似乎没有必要。
我想不出在后台获取 viewWillTransitionToSize
有用或正确的原因,所以如果您 在背景:
if UIApplication.shared.applicationState == .background {
return
}
不过,这感觉像是一个错误,我认为您应该向 Apple 报告它。
事实证明,没有办法阻止将旋转事件报告给应用程序。我怀疑这是一个 iOS 错误。但是,当应用程序状态为 UIApplicationStateBackground
时忽略 viewWillTransitionToSize:withTransitionCoordinator:
并在视图的 layoutSubviews
(如果存在)中执行相同操作使我能够解决该问题。