You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:36:03