我有一个带有
.sidebarTrackingSeparator
和 NSTrackingSeparatorToolbarItem
的工具栏,用于跟踪第二个分隔线。
在所有三个结果工具栏分区中都有工具栏项目,但中间的项目目前已被删除以避免混乱。还有标准窗口(文档)标题:
第二个跟踪分离器工作正常。当面板折叠时,工具栏项目仍然可见,并有一条小线指示跟踪器的位置。
侧边栏跟踪项目出现问题。当侧边栏折叠时,其上方的工具栏项目将移至溢出菜单:
工具栏上还有足够的空间,因此没有理由将它们移至溢出菜单。为什么它们移到那里而不显示在窗口标题的左侧?
奇怪的是,如果我的应用程序启动时侧边栏已经折叠,那么这些项目将显示在我期望的位置:
一旦侧边栏显示并再次折叠,它们就会消失。
通过自定义
NSTrackingSeparatorToolbarItem
更改(系统提供的)侧边栏跟踪器会产生相同的行为。
我使用委托创建工具栏项:
extension WindowController: NSToolbarDelegate {
func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return [.toggleSidebar, .importData, .toggleGrid, .toggleInspector, .sidebarTrackingSeparator, .splitViewTracker]
}
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return [.toggleSidebar, .importData, .sidebarTrackingSeparator, .toggleGrid, .splitViewTracker, .toggleInspector]
}
func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
let item = NSToolbarItem(itemIdentifier: itemIdentifier)
switch itemIdentifier {
...
case .splitViewTracker:
return NSTrackingSeparatorToolbarItem(identifier: itemIdentifier, splitView: window!.contentViewController!.view.subviews[0] as! NSSplitView, dividerIndex: 1)
default:
break
}
return item
}
如何确保当侧边栏折叠时(并且有足够的空间),侧边栏工具栏项目仍然显示在工具栏上?
这是 macOS Sonoma 中引入的错误,解决方法是使侧边栏的最小厚度足以显示其上方的两个项目。
更好的方法是提交错误报告并让 Apple 尽快修复。