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

macOS SwiftUI中.defaultCustomization(.hidden)默认不隐藏工具栏项问题

SwiftUI macOS工具栏defaultCustomization(.hidden)无效的解决办法

你遇到的问题是macOS 13+下SwiftUI工具栏里,用.defaultCustomization(.hidden)标记的按钮和分隔线依然默认显示,下面是几个实测有效的解决思路:

1. 清除应用的工具栏偏好缓存

macOS会自动记住用户对工具栏的自定义设置,哪怕你改了代码里的默认状态,旧的缓存还是会生效。解决步骤:

  • 彻底关闭你的应用
  • 打开终端,输入:
    defaults delete 你的应用BundleID
    
    把「你的应用BundleID」换成Xcode项目里的实际Bundle ID(在项目设置的「Identity」面板中可查看)
  • 重新构建并运行应用

2. 调整ToolbarItem的代码结构

不要给Spacer单独套ToolbarItem,把需要隐藏的项放进ToolbarItemGroup中,既符合系统布局规范,也能避免识别异常:

.toolbar(id: "PackageActions") {
    // 主操作区(默认显示)
    ToolbarItem(id: "upgradePackagesAction", placement: .primaryAction) {
        upgradePackagesButton
    }
    .defaultCustomization(.visible)

    ToolbarItem(id: "addTapAction", placement: .primaryAction) {
        addTapButton
    }
    .defaultCustomization(.visible)

    ToolbarItem(id: "installPackageAction", placement: .primaryAction) {
        installPackageButton
    }
    .defaultCustomization(.visible)

    // 辅助操作区(部分默认隐藏)
    ToolbarItemGroup(placement: .secondaryAction) {
        Spacer()
        
        ToolbarItem(id: "maintenanceAction") {
            performMaintenanceButton
        }
        .defaultCustomization(.hidden)

        ToolbarItem(id: "manageServicesAction") {
            manageServicesButton
        }
        .defaultCustomization(.hidden)

        ToolbarItem(id: "divider") {
            Divider()
        }
        .defaultCustomization(.hidden)
    }
}

3. 确认窗口的工具栏角色

如果窗口设置了特殊的工具栏角色,可能会干扰自定义逻辑,确保窗口使用默认角色:

WindowGroup {
    ContentView()
}
.toolbarRole(.automatic) // 或.windowToolbar,二者均适用

4. 检查ToolbarItem的ID唯一性

重复的ToolbarItem ID会导致系统无法正确识别自定义规则,再次确认所有项的id都是唯一的。

按以上步骤操作后,标记为.defaultCustomization(.hidden)的工具栏项会默认隐藏,同时用户仍可通过右键工具栏→「自定义工具栏」来添加这些项。

内容的提问来源于stack exchange,提问作者David Bureš

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:19:56