UISplitViewController设置doubleColumn样式后主视图宽度异常如何解决
UISplitViewController doubleColumn 样式主视图宽度异常修复方案
问题原因
使用UISplitViewController(style: .doubleColumn)初始化时,系统会采用iPadOS/macOS Catalyst下的全新默认列宽配置,主列(primary)默认的最小、最大宽度阈值远高于无参初始化的默认值,因此会出现CalendarViewController宽度超出标准主视图的情况。
修复方法
- 第一步:显式配置主列宽度参数
通过UISplitViewController提供的列宽属性,将主列宽度固定为iOS标准侧边栏宽度(默认320,可按需调整):
let splitViewController = UISplitViewController(style: .doubleColumn) splitViewController.preferredDisplayMode = .oneBesideSecondary // 配置主列宽度为标准值 splitViewController.preferredPrimaryColumnWidth = 320 splitViewController.minimumPrimaryColumnWidth = 320 splitViewController.maximumPrimaryColumnWidth = 320 splitViewController.viewControllers = [ UINavigationController(rootViewController: CalendarViewController()), DetailViewController() ]
如果需要适配横竖屏动态调整宽度,可以适当放开最小、最大宽度阈值:
// 横屏时宽度最大可到375,竖屏时最小压缩到280,优先用320的偏好值 splitViewController.preferredPrimaryColumnWidth = 320 splitViewController.minimumPrimaryColumnWidth = 280 splitViewController.maximumPrimaryColumnWidth = 375
- 第二步:添加侧边栏显隐控制
如果需要支持用户手动切换日历侧边栏的显示隐藏,可以在导航栏添加控制按钮,调用系统自带的切换方法即可:
// 导航栏添加侧边栏控制按钮 navigationItem.leftBarButtonItem = UIBarButtonItem( image: UIImage(systemName: "sidebar.left"), style: .plain, target: self, action: #selector(toggleSidebar) ) // 切换侧边栏显隐的动作实现 @objc private func toggleSidebar() { splitViewController?.toggle(.primary) }
内容的提问来源于stack exchange,提问作者Niklas
相关产品推荐
相关产品推荐

