You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在macOS Catalyst应用中禁用「Show Tab Bar」选项

彻底禁用macOS Catalyst应用的「Show Tab Bar」选项

绝对有办法解决这个问题,而且有两种可靠的方式,其中第一种是最彻底的,完全能满足你“绝不会使用标签页功能”的需求:

方法一:从系统层面禁用窗口标签页支持(推荐)

这种方法直接让你的应用窗口不支持标签页功能,系统会自动移除菜单栏里的「Show Tab Bar」选项,从根源上避免布局被破坏。

在你的UIWindowSceneDelegate的scene(_:willConnectTo:options:)方法中添加以下代码:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = scene as? UIWindowScene else { return }
    
    // 获取当前窗口对应的AppKit NSWindow
    if let nsWindow = windowScene.windows.first?.nsWindow {
        // 禁用标签页模式,系统会自动处理菜单栏选项
        nsWindow.tabbingMode = .disallowed
    }
}

设置tabbingMode为.disallowed后,窗口将完全不支持标签页相关功能,「Show Tab Bar」选项会直接从菜单栏中消失,不会再干扰你的布局。

方法二:手动移除菜单栏中的「Show Tab Bar」选项

如果第一种方法在某些场景下不生效(比如特殊的窗口配置),你可以手动修改菜单栏,精准移除这个选项。

在你的主视图控制器中重写buildMenu(with:)方法:

override func buildMenu(with builder: UIMenuBuilder) {
    super.buildMenu(with: builder)
    
    // 获取系统默认的Window菜单
    guard let windowMenu = builder.menu(for: .window) else { return }
    
    // 过滤掉「Show Tab Bar」对应的菜单项
    let filteredChildren = windowMenu.children.filter { menuItem in
        guard let action = menuItem.action else { return true }
        // 系统的Show Tab Bar动作对应的selector是"toggleTabBar:"
        return action.description != "toggleTabBar:"
    }
    
    // 替换原来的Window菜单为过滤后的版本
    let updatedWindowMenu = UIMenu(title: windowMenu.title, children: filteredChildren)
    builder.replace(menu: .window, with: updatedWindowMenu)
}

这种方式直接修改菜单栏结构,把不需要的选项删掉,不过相比第一种方法,它只是隐藏了选项,并没有从系统层面禁用标签页功能,所以更推荐第一种方案。

内容的提问来源于stack exchange,提问作者ThiagoAM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:32:23