gpt4 book ai didi

ios - 进入多任务时更改 UISplitViewController displayMode 属性? (iOS 14)

转载 作者:行者123 更新时间:2023-12-01 16:05:20 34 4
gpt4 key购买 nike

如何检测 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属性(property)给 .twoDisplaceSecondary当屏幕较窄,但水平尺寸等级保持正常时(即纵向时,或另一个应用程序处于多任务状态时)。这将允许将第 3 列推到屏幕外(移位)而不是压扁。
我正在寻找的确切行为的一个完美示例是 iOS 14 中 iPad 上的联系人应用程序。它使用三列布局,似乎显示模式为 .tile .当应用程序在横向全屏时,所有 3 列都会显示,并且有足够的空间不会发生挤压。但是,如果您将另一个应用程序带入多任务处理(从而使联系人应用程序宽度变窄,但水平尺寸类保持正常),则 displayMode 似乎更改为 .twoDisplaceSecondary ,并且第三列被推离屏幕而不是被压扁。
我想我可以通过 viewWillTransitionToSize() 管理方向更改方法,但我无法找到委托(delegate)或其他方法来检测应用程序何时变窄,但仍然使用 .regular水平尺寸类,就像联系人应用程序一样,似乎可以做到。
显示我所引用内容的屏幕截图:
Contacts app w/ triple columns, full screen width
Contacts app in multitasking, with 3rd column, displaced
您可以在第二个屏幕截图中看到,当空间不足时,第 3 列被移位而不是被挤压。

最佳答案

我发现设置 BOTH .preferredDisplayMode 很重要和 .preferredSplitBehavior当 View 转换时。只设置一个或另一个会导致很多奇怪的行为。
对于 future 的读者,我发现适用于这种情况的是设置 preferredDisplayMode = .twoBesideSecondarypreferredSplitBehavior = .tile当屏幕足够宽时,设置preferredDisplayMode = .oneBesideSecondarypreferredSplitBehavior = .displace屏幕窄的时候。我使用了一个函数来检查 view.frame.size.width < 1194 来确定屏幕是否是全宽的,因为如果应用程序与另一个应用程序并排,则仅使用方向会导致问题。我将其称为 viewDidLoad以及 viewWillTransition(toSize:) .

关于ios - 进入多任务时更改 UISplitViewController displayMode 属性? (iOS 14),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62733055/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com