SwiftUI如何在运行时修改Picker选中元素的颜色?
SwiftUI Picker 选中元素自定义颜色实现方法
当然可以实现,下面给你两种实用的实现方式:
方案一:直接通过选中值判断
在ForEach内部的Text组件中,根据当前元素是否与selectedProjectString匹配,设置不同的文字颜色即可。注意要移除Picker上的全局foregroundColor,避免覆盖子元素的自定义颜色设置。
修改后的代码:
Picker("Select a Project", selection: $selectedProjectString){ ForEach(projects, id: \.self) { project in Text(project) .lineLimit(1) .frame(height:120) .foregroundColor(project == selectedProjectString ? .blue : .white) } } .frame(height: 120)
方案二:通过索引判断(适合需用到索引的场景)
如果需要同时处理元素索引,可以用enumerated()遍历数组,拿到索引和元素后再做颜色判断,逻辑和方案一一致:
Picker("Select a Project", selection: $selectedProjectString){ ForEach(Array(projects.enumerated()), id: \.element) { _, project in Text(project) .lineLimit(1) .frame(height:120) .foregroundColor(project == selectedProjectString ? .orange : .white) } } .frame(height: 120)
注意事项
- 若使用Picker的默认滚轮样式,自定义颜色会覆盖系统自带的选中高亮效果
- 确保
selectedProjectString与projects中的元素内容完全匹配(比如大小写、特殊字符一致),否则判断逻辑会失效
内容的提问来源于stack exchange,提问作者Pjaks
相关产品推荐
相关产品推荐

