SwiftUI macOS端TabView的tabItem强调色无法修改问题
macOS端自定义TabView tabItem选中强调色方案
问题表现
- iOS 15.4环境下,给TabView添加
.accentColor(.orange)可正常将tabItem选中态设置为橙色,运行效果:
- macOS 12.4(21F79)环境下,相同代码中
.accentColor(.orange)修饰符失效,tabItem选中态始终为系统默认蓝色,运行效果:
- macOS系统默认控件强调色设置入口参考:

复现代码
TabView { Text("The First Tab") .badge(10) .tabItem { Image(systemName: "1.square.fill") Text("First") } Text("Another Tab") .tabItem { Image(systemName: "2.square.fill") Text("Second") } Text("The Last Tab") .tabItem { Image(systemName: "3.square.fill") Text("Third") } } .font(.headline) .accentColor(.orange) // macOS端该修饰符对tabItem选中态无效
解决方法
方法1:替换为tint修饰符(推荐,支持macOS 12+)
.accentColor在macOS端的作用域不覆盖TabView的选中态样式,直接替换为SwiftUI 3.0新增的.tint修饰符即可双端生效:
TabView { // 原有Tab页内容无需修改 } .font(.headline) .tint(.orange)
适配提示:如果是在Settings场景(即系统偏好设置样式的侧边栏Tab)使用,不要显式给TabView指定.tabViewStyle(.sidebar),保持默认.automatic样式即可让tint颜色正常生效。
方法2:通过AppKit外观代理修改(兼容低版本)
如果需要兼容macOS 12以下版本,可在App启动时通过AppKit的全局外观配置修改控件选中色:
// 在App的init方法或applicationDidFinishLaunching回调中添加 NSWindow.appearance().tintColor = .orange
如果不需要修改全局控件颜色,仅需调整单个TabView的选中色,可通过NSViewRepresentable封装自定义容器,单独修改对应视图层级的tintColor即可。
内容的提问来源于stack exchange,提问作者Donly
相关产品推荐
相关产品推荐

