如何检测 iPad 多任务处理(即屏幕上显示的另一个应用程序,与我的应用程序并排)何时激活?
我有UISplitViewController
以下参数设置如下:
preferredDisplayMode = .twoBesideSecondary
preferredSplitBehavior = .tile
setViewController(SidebarVC(), for: .primary)
setViewController(SuppVC(), for: .supplementary)
setViewController(SecondaryVC(), for: .secondary)
在横向中,所有 3 列 ( .primary, .supplementary, .secondary
) 都有足够的空间。在纵向或多任务处理时,屏幕宽度更窄,我的第 3 列 ( .secondary
) 被挤压到非常窄的宽度。水平尺寸类保持正常,所以我不能用它来检测它。(当水平尺寸等级变得紧凑时,我的UISplitViewController.compact
表演和工作都很好)。
我想将UISplitViewController.displayMode
属性更改.twoDisplaceSecondary
为屏幕较窄时,但水平尺寸类保持常规(即在纵向时,或当另一个应用程序处于多任务处理时)。这将允许将第 3 列推到屏幕外(移位)而不是压扁。
我正在寻找的确切行为的一个完美示例是 iOS 14 中 iPad 上的联系人应用程序。它使用三列布局,似乎显示模式为.tile
. 当应用程序在横向全屏时,所有 3 列都会显示,并且有足够的空间不会发生挤压。但是,如果您将另一个应用程序带入多任务处理(从而使联系人应用程序宽度变窄,但水平大小类保持正常),则 displayMode 似乎更改为.twoDisplaceSecondary
,并且第三列被推到屏幕外而不是被压扁。
我想我可以通过viewWillTransitionToSize()
方法管理方向更改,但我无法找到委托或其他方式来检测应用程序何时变窄,但仍然使用.regular
水平大小类,如联系人应用程序,似乎能够做到.
您可以在第二个屏幕截图中看到,当空间不足时,第 3 列被移位而不是被挤压。