从 Window 菜单中删除与选项卡相关的功能?

Remove tab-related functions from Window menu?

我正在自定义 Mac Catalyst 应用程序中的菜单。我添加了两个项目,如您在以下屏幕截图中所见(“设置 Window 大小”和“打开单独的文档查看器”)。但是我想摆脱出现在这两个项目之间的默认菜单项(四个选项卡相关的功能)。

buildMenuWithBuilder 中,我可以像这样删除一些项目(子菜单):

[builder removeMenuForIdentifier:UIMenuMinimizeAndZoom];

但是没有defined identifier包含选项卡功能的子菜单。更重要的是,当 buildMenuWithBuilder 运行时它还不存在。如果我将此代码放在该方法的末尾...

UIMenu *test = [builder menuForIdentifier:UIMenuWindow];
NSArray *test2 = [test children];

...然后 test2 只包含两个默认菜单,UIMenuMinimizeAndZoomUIMenuBringAllToFront,加上我的自定义菜单。所以即使我有它的标识符,我怀疑在这里删除它也没有任何效果。

更奇怪的是,它出现在我的两个自定义菜单之间,即使我使用 insertChildMenu:atStartOfMenuForIdentifier: 一个接一个地添加它们。

最后,我注意到当我打开第二个场景时(在新的 Mac window 中),这些选项卡选项从 Window 菜单中消失并且不会回来.似乎 macOS 最初决定这些功能可能与我的应用程序相关,但是当我打开一个场景时,它决定它们不相关并删除它们。所以我想知道是否有办法从一开始就告诉 macOS 不要包含这些菜单项?

我认为这可能与 NSWindow 属性 tabbingMode 有关,但将我的主要 window 设置为 NSWindowTabbingModeDisallowed 没有任何区别。我唯一的 Mac 开发经验是通过 Mac Catalyst,所以我不知道还能尝试什么。

我想如果你完全禁用标签,它们就会消失。这有点hack,因为你需要调用AppKit代码,但是苹果工程师给了我:

Class _nswindow = NSClassFromString(@"NSWindow"); [_nswindow setAllowsAutomaticWindowTabbing:NO];