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

如何在iPad上让SwiftUI侧边栏像苹果设置APP一样永久显示?

iPad端固定不可折叠的双列NavigationSplitView实现方案

要实现类似苹果设置APP的固定双列布局,禁止侧边栏折叠,需要从锁定布局状态、隐藏切换按钮、禁用拖拽手势三个维度处理,修改后的代码如下:

struct SettingsView: View {
    // 始终维持双列布局状态
    @State private var columnVisibility = NavigationSplitViewVisibility.doubleColumn
    
    var body: some View {
        NavigationSplitView(columnVisibility: $columnVisibility) {
            Text("Sidebar")
        } detail: {
            Text("Detail")
        }
        // 监听布局变化,强制重置为双列
        .onChange(of: columnVisibility) { _, newValue in
            if newValue != .doubleColumn {
                columnVisibility = .doubleColumn
            }
        }
        // 隐藏系统自带的侧边栏切换按钮
        .toolbar(.hidden, for: .navigationBar)
        // 固定侧边栏宽度,禁用拖拽折叠手势
        .navigationSplitViewColumnWidth(min: 280, ideal: 280, max: 280)
        .navigationSplitViewStyle(.prominentDetail)
    }
}

关键逻辑说明:

  • 锁定布局状态:通过onChange监听布局状态变化,一旦用户尝试切换为单列,立即强制恢复双列布局,从根源阻止状态变更。
  • 隐藏切换按钮:用.toolbar(.hidden)隐藏导航栏上的侧边栏切换图标,消除用户触发折叠的入口。
  • 禁用拖拽手势:将侧边栏的最小、理想、最大宽度设为固定值,配合.prominentDetail样式,让侧边栏无法被拖拽收缩。

该方案在iPad全尺寸设备上的表现和系统设置APP一致,始终保持双列展示。

内容的提问来源于stack exchange,提问作者alionthego

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:10:24