首页 > 解决方案 > 在 macOS 上的 SwiftUI NavigationView 中切换侧边栏

问题描述

我有一个带有 a 的 macOS 应用程序,NavigationView并且希望在窗口的工具栏中有默认的 ToggleSidebar 项目。

目前我将 ToolbarItem 的目标设置toolbarWillAddItem(_)NSToolbarDelegate.

在我实现的 AppDelegate 内部

@objc func toggleSidebar(_ sender: Any) {
    ((window.contentView?.subviews.first?.subviews.first?.subviews.first as? NSSplitView)?.delegate as? NSSplitViewController)?.toggleSidebar(self)
}

该解决方案现在正在运行。如果 SwiftUI 的实现会改变这个中断。

那么如何以更好的方式做到这一点呢?

标签: swiftmacosswiftuiappkit

解决方案


从 macOS Big Sur beta 4 开始,您可以使用 SwiftUI 2.0 添加默认侧边栏命令。

var body: some Scene {
    WindowGroup {
        NavigationView {
            Group {
                SidebarView()
                ContentView()
            }
        }
    }
    .commands {
        SidebarCommands()
    }
}

此代码将添加“切换侧边栏”快捷方式:

在此处输入图像描述

侧边栏查看代码:

var body: some View {
    List {
        ForEach(0..<5) { index in
            Text("\(index)")
        }
    }
    .listStyle(SidebarListStyle())
}

推荐阅读