无法将UISplitViewController嵌入UITabBarController,旧方案失效如何解决?
问题原因
你遇到的是UISplitViewController作为UITabBarController子项时的默认布局行为异常问题,核心诱因有两点:
- 未给UISplitViewController的主、次列控制器嵌套导航容器,不符合系统对分栏控制器的结构要求,导致布局计算出错
- 未显式指定分栏控制器的展示模式,默认的自动模式会根据尺寸类无规律切换展示样式
修复后的完整代码
let redViewController = UIViewController() redViewController.view.backgroundColor = .red // 主控制器嵌套导航容器,为分栏控制器提供标准栈管理能力 let primaryNav = UINavigationController(rootViewController: redViewController) let blueViewController = UIViewController() blueViewController.view.backgroundColor = .blue // 次控制器嵌套导航容器 let secondaryNav = UINavigationController(rootViewController: blueViewController) let splitViewController = UISplitViewController(style: .doubleColumn) splitViewController.setViewController(primaryNav, for: .primary) splitViewController.setViewController(secondaryNav, for: .secondary) // 显式指定双列并排展示,避免自动切换 splitViewController.preferredDisplayMode = .oneBesideSecondary // 可选配置:固定主列宽度,按需开启 // splitViewController.minimumPrimaryColumnWidth = 320 // splitViewController.maximumPrimaryColumnWidth = 320 let tabBarController = UITabBarController() tabBarController.setViewControllers([splitViewController], animated: false) window?.rootViewController = tabBarController
补充说明
如果需要适配iPhone紧凑宽度场景下自动折叠为导航栈的交互,将preferredDisplayMode改回.automatic即可,嵌套导航容器的操作不能省略,否则折叠后的导航跳转、返回逻辑会失效。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

