SwiftUI中.accentColor已废弃,如何正确设置TabBarIcon颜色?
在SwiftUI中设置TabBar选中图标颜色(无需accentColor,优先外观代理)
方法一:使用UITabBar外观代理(全局生效)
核心是必须在App初始化阶段设置,而非View内部,否则外观代理修改不会生效。示例代码如下:
@main struct YourApp: App { init() { // 设置选中TabBarItem的图标与文字颜色 UITabBar.appearance().tintColor = UIColor.orange // 可选:设置未选中图标颜色 UITabBar.appearance().unselectedItemTintColor = UIColor.red // 可选:设置未选中文字颜色 UITabBarItem.appearance().setTitleTextAttributes( [.foregroundColor: UIColor.green], for: .normal ) } var body: some Scene { WindowGroup { MainView() } } }
你之前设置tintColor无效,大概率是因为设置时机错误——若在View内部设置,SwiftUI视图层级已初始化完成,外观代理的修改无法生效。
方法二:使用Assets Catalog设置全局强调色(官方推荐)
这是系统提示的替代方案,无需编写代码即可全局生效:
- 打开
Assets.xcassets - 右键选择New Color Set,命名为
AccentColor - 调整颜色值,该颜色会自动作为TabBar选中项的颜色,同时成为App默认强调色
- 若需单独指定TabBar颜色,可创建新Color Set,再通过外观代理关联:
init() { let tabSelectedColor = UIColor(named: "TabBarSelectedColor")! UITabBar.appearance().tintColor = tabSelectedColor }
方法三:SwiftUI原生tint修饰符(局部/全局)
若不想用外观代理,可在WindowGroup层级设置tint,而非TabView层级:
@main struct YourApp: App { var body: some Scene { WindowGroup { MainView() .tint(.orange) // 全局生效,包含TabBar选中项 } } }
你之前在TabView上设置tint无效,是因为SwiftUI的TabViewtint修饰符不会传递到底层UITabBar,而在WindowGroup或App层级设置则会全局应用。
补充说明
selectedImageTintColor已废弃,请勿使用- 若需给单个TabItem设置独特颜色,SwiftUI原生暂不支持,需通过自定义TabBar实现
内容的提问来源于stack exchange,提问作者Andrei Herford
相关产品推荐
相关产品推荐

