如何在iPad上让SwiftUI侧边栏像苹果设置APP一样永久显示?
要实现类似苹果设置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
相关产品推荐
相关产品推荐

