侧边栏中的 Big Sur 工具栏项目

Big Sur Toolbar Items in the Sidebar

在 Big Sur,Xcode 和日历的工具栏项在打开时位于侧边栏上方,但在侧边栏折叠时仍显示在左侧。

边栏打开:

边栏已折叠:

在 13:55 的 "Adopt the New Look of macOS" 中,约翰说“放在分隔符 [sidebarTrackingSeparator] 之前的项目将出现在 full-height 侧边栏上”,就像它们在 Xcode 和日历。我没能完成这项工作。

Here's a sample project 说明了这个问题。我使用了 IB-defined“Window 带侧边栏的控制器”并添加了一个工具栏项来切换侧边栏。在 NSWindowController 的子类中,我在 .toggleSidebar 项之后插入 .sidebarTrackingSeparator

override func windowDidLoad() {
    // Sometimes the toolbar items aren't loaded yet--async is a quick and dirty way to prevent a crash
    DispatchQueue.main.async {
        self.window?.toolbar?.insertItem(withItemIdentifier: .sidebarTrackingSeparator, at: 1)
    }
}

有时这没有效果(切换按钮保留在侧边栏的右侧)。有时侧边栏切换会放在溢出菜单中:

我没有在 WWDC 之外看到任何关于实现此工具栏设计的讨论 session。有人能让这个工作吗?

这是 IB/Code 时间上的分歧。 Interface Builder 在您添加 .sidebarTrackingSeparator 工具栏项之前配置并安装工具栏。

所以你做对了,只是太晚了。还有 稍后 的调度。我认为重要的是在 window.

上设置工具栏之前将项目放在那里

不幸的是,这在 IB 中是不可能的,除非我相信,您创建一个全新的工具栏并重新分配它。但这是个坏主意,因为那样你可能会 运行 陷入麻烦 auto-saving 工具栏的状态。

诀窍是在 Interface Builder 中配置分隔符。如果您查看 ObjC documentation for this constant,您会看到一个更长的名称:NSToolbarSidebarTrackingSeparatorItemIdentifier.

我们最多只能希望符号的名称与标识符的值相同。如果你真的想验证这一点,你可以在调试器中打印符号的值:

(lldb) po NSToolbarSidebarTrackingSeparatorItemIdentifier
NSToolbarSidebarTrackingSeparatorItemIdentifier

如果我们在 IB 中创建自定义工具栏项,并根据 John 的视频添加它...

低看: