如何确保macOS SwiftUI应用启动时侧边栏始终开启?或禁止其调整大小?
一、确保应用启动时侧边栏始终开启
你可以直接操作底层的NSSplitViewController来强制展开侧边栏,具体实现如下:
1. 添加展开侧边栏的工具方法
在你的ContentView中添加以下方法:
func ensureSidebarOpen() { // 获取窗口的分栏视图控制器 guard let splitViewController = NSApp.keyWindow?.contentViewController as? NSSplitViewController else { return } // 侧边栏是第一个分栏项 let sidebarItem = splitViewController.splitViewItems[0] // 如果侧边栏处于折叠状态,展开它 if sidebarItem.isCollapsed { sidebarItem.animator().isCollapsed = false } }
2. 在视图加载时调用方法
在NavigationView的onAppear回调中调用上述方法,确保视图加载完成后侧边栏展开:
var body: some View { NavigationView { // 你的侧边栏视图 SidebarView() // 你的主内容视图 MainView() } .onAppear { // 延迟调用确保视图完全初始化 DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { ensureSidebarOpen() } } .toolbar { ToolbarItem(placement: .navigation) { Button(action: toggleSidebar, label: { Image(systemName: "sidebar.leading") }) } } } // 优化后的侧边栏切换方法 func toggleSidebar() { guard let splitViewController = NSApp.keyWindow?.contentViewController as? NSSplitViewController else { return } let sidebarItem = splitViewController.splitViewItems[0] sidebarItem.animator().isCollapsed = !sidebarItem.isCollapsed }
二、禁止侧边栏被调整大小/折叠
如果不希望用户调整侧边栏宽度或折叠它,可以通过设置分栏项的属性来限制:
修改ensureSidebarOpen方法,添加以下配置:
func ensureSidebarOpen() { guard let splitViewController = NSApp.keyWindow?.contentViewController as? NSSplitViewController else { return } let sidebarItem = splitViewController.splitViewItems[0] // 禁止折叠侧边栏 sidebarItem.canCollapse = false // 设置固定宽度(最小和最大宽度设为相同值) sidebarItem.minimumWidth = 200 sidebarItem.maximumWidth = 200 // 确保侧边栏处于展开状态 if sidebarItem.isCollapsed { sidebarItem.animator().isCollapsed = false } }
如果只是想禁止拖到隐藏但允许调整宽度,只需设置minimumWidth为一个非0值(比如150),不设置maximumWidth即可。
内容的提问来源于stack exchange,提问作者c00000fd
相关产品推荐
相关产品推荐

