SwiftUI TextField 前景色问题

fil*_*ras 4 swiftui

我正在尝试进行实时电子邮件验证,但模拟器有奇怪的行为。当电子邮件无效时,它应该是红色的,当它有效时,文本的颜色应该是黑色,但有些字符保持红色。

struct EmailText: View {
    
    @State var textFieldValue: String = ""
    
    private func isValid(_ s: String) -> Bool {
        // not real validation function, just for simplicity
        return Int.random(in: 0 ... 1) == 1
    }
    
    var body: some View {
        TextField("", text: $textFieldValue)
            .foregroundColor(isValid(textFieldValue) ? .black : .red)
            .padding()
    }
}
Run Code Online (Sandbox Code Playgroud)

演示

编辑:我已将验证函数从正则表达式更新为简单条件,以排除正则表达式作为可能的问题。

Jan*_*ker 6

解决方案:禁用自动更正。

TextField("", text: $textFieldValue)
            .foregroundColor(isValid(textFieldValue) ? .black : .red)
            .padding()
            .autocorrectionDisabled() // <----
Run Code Online (Sandbox Code Playgroud)

最肯定的是 SwiftUI 错误,导致拼写检查警告的文本​​突出显示和前景色之间发生干扰。