Swiftui 快捷方式更新onEditChanged不会弹出键盘

Swiftui 快捷方式更新onEditChanged不会弹出键盘,swiftui,Swiftui,当选中文本框时,我正在尝试更新包含我的文本框的HStack的样式。在下面的示例中,我希望文本框在选中时具有红色边框,否则边框应为灰色 我的问题是,文本框似乎经历了一个我不想要的中间过渡,即边框被更新为红色,但在我再次选择文本框之前,键盘不会弹出(文本框向上移动一点,然后向下移动)。视图刷新的顺序似乎存在一些问题 @State private var text: String @State private var textFieldSelected: Bool = false v

当选中文本框时,我正在尝试更新包含我的文本框的
HStack
的样式。在下面的示例中,我希望文本框在选中时具有红色边框,否则边框应为灰色

我的问题是,文本框似乎经历了一个我不想要的中间过渡,即边框被更新为红色,但在我再次选择文本框之前,键盘不会弹出(文本框向上移动一点,然后向下移动)。视图刷新的顺序似乎存在一些问题

@State private var text: String
@State private var textFieldSelected: Bool = false
        
var body: some View {
        let stack = HStack {
            TextField("Enter name", text: $text, onEditingChanged: {
                (changed) in
                    textFieldSelected = changed
            })
        }
        
        if (textFieldSelected) {
            stack
                .overlay(RoundedRectangle(cornerRadius: 10).stroke(Color.red, lineWidth: 1))
        } else {
            stack
                .overlay(RoundedRectangle(cornerRadius: 10).stroke(Color.gray, lineWidth: 1))
        }
    }
以下是现有行为的视频示例:


通过对边框使用三元条件使其更加简单,并且不会出现问题

struct ContentView : View {
    @State private var text: String = ""
    @State private var textFieldSelected: Bool = false
            
    var body: some View {
        HStack {
            TextField("Enter name", text: $text, onEditingChanged: {
                (changed) in
                    textFieldSelected = changed
            })
        }
        .overlay(RoundedRectangle(cornerRadius: 10).stroke(textFieldSelected ? Color.red : Color.gray, lineWidth: 1))
    }
}
    
在iPhone8和iOS 14上测试


通过对边界使用三元条件使其更加简单,问题就不会出现

struct ContentView : View {
    @State private var text: String = ""
    @State private var textFieldSelected: Bool = false
            
    var body: some View {
        HStack {
            TextField("Enter name", text: $text, onEditingChanged: {
                (changed) in
                    textFieldSelected = changed
            })
        }
        .overlay(RoundedRectangle(cornerRadius: 10).stroke(textFieldSelected ? Color.red : Color.gray, lineWidth: 1))
    }
}
    
在iPhone8和iOS 14上测试