为什么SwiftUI中tabItem的systemImage显示为填充而非空心样式?
问题原因
这是iOS系统针对TabBar组件的内置渲染规则导致的:
- 苹果官方设计规范要求TabBar选中状态的图标使用填充样式,未选中状态使用空心样式,系统会自动给tabItem内的SF Symbols添加填充变体适配选中状态,你看到的填充样式是对应Tab处于选中状态的默认表现。
- 如果你使用的是iOS 15及以上系统,该自动适配行为是默认开启的,和你使用的Xcode、SF Symbols版本没有关系。
解决方案
如果你需要强制tabItem始终展示原始的空心图标,不需要系统自动切换填充状态,可以给Label添加symbolVariants环境变量覆盖默认适配逻辑,修改后的代码如下:
struct TestView: View { var body: some View { TabView { Text("Map!") .tabItem { Label("Map", systemImage: "map") .environment(\.symbolVariants, .none) } Text("Profile") .tabItem { Label("Person", systemImage: "person") .environment(\.symbolVariants, .none) } } } }
添加.environment(\.symbolVariants, .none)后,系统不会自动给图标添加填充变体,会始终保留你指定的原始图标样式。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

