如何在Sierra应用程序中禁用“显示选项卡栏”菜单?

20

我有一个使用NSWindow中的工具栏的应用程序。出于美观原因,我不希望用户能够自定义此工具栏。在Sierra中,有一个新的菜单选项被插入到“菜单 > 视图”中,称为显示标签栏。如何禁用它?启用它似乎只会增加工具栏的高度,因为我没有额外的标签显示在图标下面。

6个回答

33

您也可以在 IB 上完成此操作,在 Window 的属性检查器中进行设置。

NSWindow attribute inspector


非常感谢。这对我很有帮助。 - Tommy
这个屏幕确切地位于哪里? - Haardik Dharma
您也可以使用以下代码进行编程处理:window.tabbingMode = NSWindowTabbingModeDisallowed - Elviss Strazdins

18

在10.12版本中,由于选项卡栏现在默认可用,因此您需要在创建窗口时设置以下内容:

[NSWindow setAllowsAutomaticWindowTabbing: NO];

在Swift和SwiftUI中答案是一样的。

func applicationWillFinishLaunching(_ notification: Notification) {
    NSWindow.allowsAutomaticWindowTabbing = false
}

请注意,该调用是在类 NSWindow 上进行的,而不是在 NSWindow 实例上进行的。


4
在10月15日,这种方法似乎不再存在了。相反,您可以将窗口的 tabbingMode 设置为 .disallowed。特别是将 window.tabbingMode = .disallowed 添加到 NSApplicationDelegateapplicationDidFinishLaunching 方法中似乎有效。 - Steven W. Klassen
1
上面的评论是不正确的,看起来他们可能试图在窗口实例上调用allowsAutomaticWindowTabbing而不是在NSWindow类上调用。在Swift和SwiftUI中,您仍然可以调用NSWindow.allowsAutomaticWindowTabbing = false来完全删除所有应用程序窗口中的这些项目,而不是为单个窗口禁用它们。 - JuJoDi

5

如果要在单个窗口上禁用选项卡,请调用setTabbingMode:

if([window respondsToSelector:@selector(setTabbingMode:)]) {
    // this particular window doesn't support tabbing in Sierra.
    [window setTabbingMode:NSWindowTabbingModeDisallowed];
}

4

Swift 5

在您的 NSWindowController 中:

self.window?.tabbingMode = .disallowed

4
如果您不想针对最新框架进行编译,可以在NSWindowsController子类中使用以下代码:
Swift:
 override func awakeFromNib() {
     if NSAppKitVersionNumber > 1500 {
        self.window?.setValue(2, forKey: "tabbingMode")
     }
 }

Objective-C:

- (void)awakeFromNib {
    if (NSAppKitVersionNumber > 1500) {
        [self.window setValue:[NSNumber numberWithInt:2] forKey:@"tabbingMode"];
    }
}

使用 Swift 4,它是 NSAppKitVersion.current.rawValue > NSAppKitVersion.macOS10_12.rawValue - ctietze
@ctietze:我的回答仅适用于使用旧版本的Xcode和Swift。 - Ely

4

Swift解决方案:

override func awakeFromNib() {
    super.awakeFromNib()
    if #available(OSX 10.12, *) {
        tabbingMode = .disallowed
    }
}

1
或者,如果您有一个应用程序委托,请在创建NSWindow之后添加一行window.tabbingMode = .disallowed - Steven W. Klassen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接