SwiftUI中如何仅在选中时设置Text前景色,保留默认适配明暗模式
解决方案
下面两种简洁方案可以满足你的需求,无需手动保存原始文本颜色,同时自动适配深浅模式:
方式一:条件应用修饰符(自定义View扩展)
先给View扩展一个通用的条件修饰方法,让你可以根据状态决定是否添加特定样式:
extension View { @ViewBuilder func applyIf<T: View>(_ condition: Bool, transform: (Self) -> T) -> some View { if condition { transform(self) } else { self } } }
然后直接在Text上使用这个扩展:
@State private var hasUserSelected = false Text("This is the item") .applyIf(hasUserSelected) { $0.foregroundStyle(Color.gray) }
只有当hasUserSelected为true时,才会给Text添加置灰样式,未选中时保持系统默认的深浅模式适配文本色。
方式二:利用系统环境色适配
SwiftUI的Color.primary会自动跟随深浅模式切换(浅色模式为黑色,深色模式为白色),直接用它作为未选中状态的颜色即可:
@State private var hasUserSelected = false Text("This is the item") .foregroundStyle(hasUserSelected ? Color.gray : Color.primary)
这种方式代码更简洁,无需额外扩展,完全依赖系统自带的颜色适配能力。
内容的提问来源于stack exchange,提问作者raddevus
相关产品推荐
相关产品推荐

