删除/隐藏工具栏跟踪分隔符

问题描述

我正在努力在我的应用中添加对全高侧边栏支持,如 macOS 11 中所引入的那样。

诀窍是,当窗口标签栏可见时,我想关闭全高侧边栏。当每个窗口中的侧边栏内容不同时,两者不能很好地混合,就像在我的应用程序中一样。有关我想要执行的操作的示例,请参阅 Xcode(查看 > 显示窗口选项卡栏)。有关我想要避免的示例(打开两个多页 PDF 并将它们放在一个选项卡式窗口中),请参阅预览。

什么是有效的: 我观察窗口的 tabbedWindows 属性,并相应地切换其 fullSizeContentView 中的 styleMask 标志。因此,当我隐藏和显示标签栏时,窗口的样式会根据需要更新。

什么不起作用:我需要在我的工具栏中有一个 sidebarTrackingSeparator 项目,以便在侧边栏上方有一些项目。但是当 fullSizeContentView 关闭时,该项目显示一个普通的分隔符。我不希望它在那种状态下可见。

没有一种直接的方法可以隐藏工具栏项,尤其是当它没有视图时,事实证明这个没有。

我尝试删除分隔符项并在窗口状态切换时重新添加它,但这导致 Cocoa 抛出异常,抱怨一次只能注册一个跟踪项。这似乎是一个错误,但 Xcode 以某种方式管理它。

那么如何在没有可见分隔符的情况下正确切换窗口和工具栏状态?

解决方法

看起来我已经解决了这个问题,当我在 toolbarWillAddItem 中看到它时保存分隔符项,然后从 toolbar(_:itemForItemIdentifier:willBeInsertedIntoToolbar:) 返回它以避免创建新实例。这样,删除和重新添加项目就不会抛出异常。

最后一个小问题是不要盲目地删除和重新添加分隔符。窗口状态可能在应用启动时一直保留,因此我不需要对窗口最初的显示方式做出假设。