iOS UISplitViewController - 从紧凑布局更改为常规布局时如何恢复导航状态

问题描述

我正在实施 iOS 14 中引入的新 UISplitViewController API。当应用程序处于常规模式时,我有一个 .doubleColumn 布局,主视图是用于导航的 UICollectionView 和用于辅助视图的相应 UIViewControllers。 对于 .compact 布局,我使用的是 UITabBarController。

现在我想实现当布局从常规变为紧凑时的导航状态恢复,反之亦然。我已经观看了相应的 WWDC 2020 视频 https://developer.apple.com/videos/play/wwdc2020/10105/,他们在其中讨论了状态恢复实现的样子。缺少的是用于检测布局更改的实际方法。

我已经发现我可以使用 splitViewController(_ svc: UISplitViewController,topColumnForCollapsingToProposedTopColumn proposedTopColumn: UISplitViewController.Column) 方法来检测 SplitVC 何时更改为 .compact 模式。

以及当 SplitVC 从 .compact 变为 .regular 时的 splitViewController(_ svc: UISplitViewController,displayModeForExpandingToProposedDisplayMode proposedDisplayMode: UISplitViewController.DisplayMode) 方法。

现在我的问题。当我想更改 SplitVC 的辅助视图控制器时,在后一种委托方法中,为了选择与 TabBar(.compact 模式)中当前可见的视图控制器匹配的正确视图控制器,我的应用程序因以下错误而崩溃留言。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',reason: 'Mutating UISplitViewController with -setViewController:forColumn: is not allowed during a delegate callback.'

当我不能在委托方法中使用 setViewController(_ vc: UIViewController?,for column: UISplitViewController.Column) 时,我应该如何在更改回 .regular 模式时准备 SplitVC?

我找不到任何关于此的官方代码示例或文档。感谢您在这方面的任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)