紧凑特性下启动UISplitViewController无法加载子视图控制器问题
UISplitViewController 紧凑分屏模式不加载子控制器问题解决方案
根因说明
该报错[Assert] Unexpected nil collapsedVC in the panelController是UISplitViewController的折叠态配置缺失导致的:分屏紧凑特性场景下,系统未找到折叠状态下默认需要展示的子控制器,因此不会触发子控制器的加载流程,只有切换到常规特性触发splitViewController的展开逻辑时,才会完成子控制器的初始化和加载。
修复方案
- 优先在UISplitViewController初始化阶段就显式指定适配多尺寸的展示模式,确保折叠态有明确的展示规则:
// 可根据业务场景选择对应的展示模式 splitViewController.preferredDisplayMode = .automatic // 紧凑场景强制展示主列可以用 .oneOverSecondary
- 若业务需要自定义折叠/展开的切换逻辑,实现UISplitViewControllerDelegate的折叠回调方法,手动处理控制器层级:
func splitViewController(_ splitViewController: UISplitViewController, collapseSecondary secondaryViewController: UIViewController, onto primaryViewController: UIViewController) -> Bool { // 示例逻辑:紧凑模式下将次级控制器的内容压入主导航栈展示 guard let primaryNav = primaryViewController as? UINavigationController, let secondaryNav = secondaryViewController as? UINavigationController, let secondaryTop = secondaryNav.topViewController else { return false } primaryNav.pushViewController(secondaryTop, animated: false) return true }
- 额外排查点:不要在UISplitViewController的生命周期方法
viewDidLoad执行前访问任意子控制器的view属性,避免提前加载打乱系统的特性适配流程。
内容的提问来源于stack exchange,提问作者AndreiVataselu
相关产品推荐
相关产品推荐

