侧边栏中的 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 的视频添加它...
低看:
在 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 的视频添加它...
低看: