
macOS 开发
macOS 开发 - macOS 26 中隐藏主窗口标题栏
在最新的 macOS 里,仅仅 .windowStyle(.hiddenTitleBar) 有时不够✨。把窗口容器背景设为透明:containerBackground(.clear, for: .window),或再配上必要的 toolbar 调整🛠️,才能真正做到“无标题栏”🎯。
239次点击2分钟阅读
背景
升级到 macOS 26 与 Xcode 16 后,我在适配 Zipic 的主窗口上遇到一个微妙变化:
- 传统做法
Window { ... }.windowStyle(.hiddenTitleBar)在某些布局下无法完全去掉标题栏的“背板/留白”。 - 栈内如果还有 toolbar 的标题或背景,它会“顽强地”把顶部那一条视觉层带回来。
标题栏无法隐藏的 zipic 主窗口
解决关键在于:为整个窗口容器设置透明背景,让内容真正延伸到窗口最上缘。
最小可行方案(精简示例)
上面保留了.hiddenTitleBar,但“真正让内容通顶的是”.containerBackground(.clear, for: .window)。
Zipic 中的实际写法(聚焦关键差异)
在 Zipic 的主窗口里,我们对 macOS 15 及以上 增加了容器背景透明:
此改动就是触发“通顶”的关键;其余如 toolbar(removing: .title)、toolbarBackgroundVisibility(.hidden, for: .windowToolbar) 可根据你是否使用到 NavigationSplitView、.navigationTitle 再按需加。
最终效果
完美隐藏标题栏的 Zipic 主窗口
踩坑 & 排查清单
- 把修饰符放在创建该窗口的 Scene 上(
Window/WindowGroup),别贴错层级。 - 界面里若存在隐式的 toolbar 标题(如
NavigationSplitView默认提供的),可移除:.toolbar(removing: .title)。 - 去掉标题栏后,启用背景拖拽:
.windowBackgroundDragBehavior(.enabled),否则用户可能无处拖动。 - 预览不一定反映最终外观,以真机/真应用运行为准。
结语
SwiftUI 在 macOS 这两年给了更多“窗口级”的能力。换句话说:标题栏不再是“你改不动的那条线”。用好 containerBackground(for: .window) 与 toolbar 系列 API,你可以更容易实现视觉统一、半透明毛玻璃、定制化的悬浮窗体验。



