You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:56:07