macOS SwiftUI中.defaultCustomization(.hidden)默认不隐藏工具栏项问题
你遇到的问题是macOS 13+下SwiftUI工具栏里,用.defaultCustomization(.hidden)标记的按钮和分隔线依然默认显示,下面是几个实测有效的解决思路:
1. 清除应用的工具栏偏好缓存
macOS会自动记住用户对工具栏的自定义设置,哪怕你改了代码里的默认状态,旧的缓存还是会生效。解决步骤:
- 彻底关闭你的应用
- 打开终端,输入:
把「你的应用BundleID」换成Xcode项目里的实际Bundle ID(在项目设置的「Identity」面板中可查看)defaults delete 你的应用BundleID - 重新构建并运行应用
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š
相关产品推荐
相关产品推荐

