当我有一个SwiftUI
Picker
,它的颜色基于一个@State
变量(Color
)时,当状态变量改变时,选择器的文本颜色不会更新。
下面是一个例子:
struct TestView: View {
@State var selColor: Color = .red
@State var selectedNumber: Int = 10
var body: some View {
VStack {
Spacer()
Text("Test String That changes color")
.foregroundColor(selColor) // <-- works as expected
Picker("Selected", selection: $selectedNumber) {
ForEach([2, 4, 6, 8, 10], id: \.self) {
Text(String($0))
}
}
.onChange(of: selectedNumber) { newValue in
selColor = [Color.red, Color.blue, Color.green, Color.yellow, Color.blue, Color.brown][Int.random(in: 0..<5)]
}
.tint(selColor) // <-- sets the color upon initialisation but doesn't update afterward
Spacer()
}
}
每当我改变选择器的值时,文本颜色会改变,但选择器的颜色不会改变。在下面的示例屏幕截图中,文本的颜色已更改为蓝色,但选择器仍为红色。
知道我哪里做错了吗
1条答案
按热度按时间vlurs2pr1#
我已经弄明白了,虽然仍然不确定为什么
.tint(_ Color)
修饰符不起作用,所以我有点担心这个解决方案是一个解决方案-但它确实有效。技巧是将色调设置为.white
,然后将所需的颜色状态变量与.colorMultiply(_ Color)
修改器连接,而不是.tint(_ Color)
。相关代码: