隐藏侧边栏时,侧边栏中的 macOS 工具栏项目会转到溢出菜单

问题描述 投票:0回答:1

我有一个带有

.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
    }

如何确保当侧边栏折叠时(并且有足够的空间),侧边栏工具栏项目仍然显示在工具栏上?

toolbar appkit nstoolbar
1个回答
0
投票

这是 macOS Sonoma 中引入的错误,解决方法是使侧边栏的最小厚度足以显示其上方的两个项目。

更好的方法是提交错误报告并让 Apple 尽快修复。

© www.soinside.com 2019 - 2024. All rights reserved.