某些背景
:该应用程序具有一个TabBarController。 TabBarController具有VC1.1和VC2.1。 该应用程序仅支持iPhone的人像和1个我们称为VC1.2的屏幕(我将在后面提到),它将以横向模式显示。 但是对于iPad,我们同时支持纵向和横向。
VC2.1是具有NavigationController的控制器。此屏幕2.1可以推送新屏幕2.2。重要说明是iPad上的屏幕2.1和2.2在拆分视图中一起显示。但是在iPhone上,我们仅在2.1和2.2中单独显示它。
那么崩溃是怎么发生的。
警告:尝试显示不在窗口层次结构中的视图!
不平衡的呼叫开始/结束外观转换。
[Assert]已尝试在过渡时关闭演示控制器。 (<_UIFullscreenPresentationController>)
[Assert]未设置transitionViewForCurrentTransition,演示控制器在演示期间被关闭了吗? (<_UIFullscreenPresentationController)
所以发生的是在VC1.2上,我们显示了我们强制处于横向模式的屏幕。 在VC2.2(和VC2.1)中,由于存在一个SplitView(即使未在iPhone中使用),因此它以某种方式尝试旋转它并“显示”(或假装显示)该拆分视图。它崩溃了,因为它做不到。
因此我们了解了为什么会发生这种情况,但不知道是否有解决方法,或者可能是iOS问题。
如果有帮助,在AppDelegate中,我们可以使用以下方法:
private func defaultInterfaceOrientations(for window: UIWindow?) -> UIInterfaceOrientationMask {
let isPhone: Bool
if let window = window {
isPhone = window.traitCollection.userInterfaceIdiom == .phone
} else {
isPhone = UIDevice.current.userInterfaceIdiom == .phone
}
return isPhone ? .portrait : .all
}
EDIT1 :
在此流程中发生了一件非常有趣的事情,它可能会提供一个额外的提示。
步骤: