首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否在进入多任务时更改UISplitViewController displayMode属性?(iOS 14)

问是否在进入多任务时更改UISplitViewController displayMode属性?(iOS 14)
EN

Stack Overflow用户
提问于 2020-07-05 02:42:19
回答 2查看 861关注 0票数 5

如何检测iPad多任务处理(即,屏幕上显示的另一个应用程序,与我的应用程序并排)何时激活?

我有一个UISplitViewController,其参数设置如下:

代码语言:javascript
复制
preferredDisplayMode = .twoBesideSecondary
preferredSplitBehavior = .tile
setViewController(SidebarVC(), for: .primary)
setViewController(SuppVC(), for: .supplementary)
setViewController(SecondaryVC(), for: .secondary)

在横向上,所有3列(.primary, .supplementary, .secondary)都有足够的空间。在纵向或多任务时,屏幕宽度变窄,我的第三列(.secondary)被压缩到非常窄的宽度。水平大小类保持规则,所以我不能用它来检测它。(当水平大小的类变得紧凑时,我的UISplitViewController.compact就可以正常显示和工作了)。

当屏幕变窄时,我想要将UISplitViewController.displayMode属性更改为.twoDisplaceSecondary,但水平大小类保持规则(例如,当处于纵向模式时,或者当另一个应用程序处于多任务模式时)。这将允许第3列被推出屏幕(位移),而不是被挤压。

我正在寻找的确切行为的一个完美例子是iOS 14中iPad上的Contacts应用程序。它使用三列布局,似乎具有displayMode of .tile。当应用程序在横向全屏时,所有3列都会显示,并且有足够的空间不会发生挤压。但是,如果您将另一个应用程序带入多任务处理(从而使联系人应用程序宽度变窄,但水平大小类保持正常),displayMode似乎会更改为.twoDisplaceSecondary,并且第3列将被推出屏幕,而不是被挤压。

我想我可以通过viewWillTransitionToSize()方法来管理方向的改变,但我还没有找到一个代理或其他方法来检测应用程序何时变窄,但仍然使用.regular水平大小类,比如Contacts应用程序,似乎可以做到这一点。

显示我引用的内容的屏幕截图:

​

你可以在第二个截图中看到,当没有足够的空间时,第三列被移位而不是被挤压。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-07 22:04:04

我发现在视图转换时同时设置.preferredDisplayMode和.preferredSplitBehavior是很重要的。只设置其中之一会导致许多奇怪的行为。

对于未来的读者,我想出的方法是在屏幕足够宽时设置preferredDisplayMode = .twoBesideSecondary和preferredSplitBehavior = .tile,然后在屏幕较窄时设置preferredDisplayMode = .oneBesideSecondary和preferredSplitBehavior = .displace。我使用了一个检查view.frame.size.width是否小于1194的函数来确定屏幕是否全宽,因为如果应用程序并排在一起,只使用方向会导致问题。我在viewDidLoad和viewWillTransition(toSize:)中都这样叫它。

票数 3
EN

Stack Overflow用户

发布于 2020-07-07 16:22:33

viewWillTransitionToSize有一个包含宽度的大小参数。通常,您将检查宽度是否小于1024。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62733055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档