SwiftUI TextField 在 iOS 17.4 中不更改前景色

问题描述 投票:0回答:1

鉴于以下观点:

struct ContentView: View {

    @State private var text: String = ""

    var body: some View {
        VStack {
            TextField("Example", text: self.$text)
            Text(self.text)
        }
        .padding()
        .foregroundStyle(self.text.count % 2 == 0 ? .red : .blue)
    }
}

输入文本时,我希望

TextField
的前景色在红色和蓝色之间变化。但是,它不适用于 iOS 17.4(它适用于 iOS 16.x 和 iOS 17 至 17.2)。是否有新的方法来实现此行为,或者它是否是 iOS 17.3+ 中的潜在错误?

ios swiftui textfield
1个回答
0
投票

在装有 iOS 17.4 的 iPhone 15 模拟器上运行时,

Text
正在改变颜色,但
TextField
没有。这可能是因为,
TextField
不依赖于会导致其在输入文本后刷新的状态变量,它仅依赖于其自身。

解决方法是对颜色使用单独的状态变量,并在

.onChange
处理程序中更新它:

@State private var text: String = ""
@State private var fgColor = Color.red

var body: some View {
    VStack {
        TextField("Example", text: self.$text)
        Text(self.text)
    }
    .padding()
    .foregroundStyle(fgColor)
    .onChange(of: text) { oldVal, newVal in
        fgColor = newVal.count % 2 == 0 ? .red : .blue
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.