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

纯SwiftUI应用中如何隐藏空的系统默认View菜单栏?

解决SwiftUI中隐藏空View菜单的问题

在纯SwiftUI应用中,即便View菜单为空,系统仍会默认显示它。要隐藏这个空菜单,你可以通过自定义应用菜单栏的方式完全替换系统默认配置,具体实现如下:

方法:自定义应用Commands

在你的App结构体中,使用.commands修饰符自定义菜单栏,只保留需要的菜单组,不包含空的View菜单即可:

@main
struct YourApp: App {
    init() {
        // 禁用自动窗口标签页
        NSWindow.allowsAutomaticWindowTabbing = false
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onReceive(NotificationCenter.default.publisher(for: NSApplication.willUpdateNotification)) { _ in
                    // 禁用缩放按钮
                    NSApplication.shared.mainWindow?.standardWindowButton(.zoomButton)?.isEnabled = false
                }
                .windowResizability(.contentSize) // 禁用全屏模式
        }
        // 自定义菜单栏,替换系统默认配置
        .commands {
            // 保留需要的系统菜单,比如File菜单(按需使用)
            CommandGroup(replacing: .file) {
                DefaultCommands.FileMenuCommands()
            }
            
            // 保留Edit菜单(按需使用)
            CommandGroup(replacing: .edit) {
                DefaultCommands.EditMenuCommands()
            }
            
            // 不添加View相关的CommandGroup,空的View菜单就不会显示
        }
    }
}

简化方式:按需添加自定义菜单

如果不需要大部分系统默认菜单,可以直接清空默认配置,只添加自定义内容:

.commands {
    // 仅添加自定义菜单,系统默认的View菜单会被移除
    CommandMenu("自定义菜单") {
        Button("操作1") {
            // 执行对应操作
        }
    }
}

原理说明

SwiftUI的commands修饰符允许完全控制应用菜单栏结构:

  • 使用CommandGroup(replacing:)可替换系统默认菜单组(如.file、.edit)
  • 不声明.view相关的CommandGroup,系统就不会生成空的View菜单
  • 该方案完全基于SwiftUI API实现,无需额外依赖AppKit窗口操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:48:21