SwiftUI:确认对话框在一秒后消失

SwiftUI: confirmationDialog disappearing after one second

请帮我解决这个问题:

重现我的问题的步骤:

  1. 点击“编辑我的名字”按钮

  2. 在 .sheet 中,点击 TextField,然后在仍然显示键盘的情况下,一直向下滚动

  3. 点击“删除名称”按钮

  4. 问题来了:

    确认对话框只出现一秒钟,然后 消失,不给用户任何机会(或少于一秒钟的机会) 点击确认对话框的按钮之一!

这是我的代码:

ContentView.swift

import SwiftUI

struct ContentView: View {
    @State private var myName = "Joe"
    @State private var isEditingName = false
    
    var body: some View {
        Text("My name is: \(myName)")
        Button("Edit My Name") {
            isEditingName = true
        }
        .padding()
        .sheet(isPresented: $isEditingName) {
            EditView(name: $myName)
        }
        
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

EditView.swift

import SwiftUI

struct EditView: View {
    @Binding var name: String
    @State private var isShowingConfirmationDialog = false
    
    var body: some View {
        Form {
            Section {
                TextField("Name", text: $name)
            }
            Section {
                VStack {
                    ForEach(0..<50, id: \.self) { number in
                        Text("\(number)")
                    }
                }
            }
            Section {
                deleteNameWithConfirmationDialog
            }
        }
    }
    
    private var deleteNameWithConfirmationDialog: some View {
        Button("Delete Name", role: .destructive) {
            isShowingConfirmationDialog = true
        }
        .confirmationDialog("Are you sure you want to delete name?", isPresented: $isShowingConfirmationDialog) {
            Button("Delete Name", role: .destructive) {
                name = ""
            }
            Button("Cancel", role: .cancel) { }
        } message: {
            Text("Are you sure you want to delte name?")
        }
    }
    
}

struct EditView_Previews: PreviewProvider {
    static var previews: some View {
        EditView(name: .constant(String("Joe")))
    }
}

如果您将 .confirmationDialogue 移出 Form,它会起作用:

struct EditView: View {
    @Binding var name: String
    @State private var isShowingConfirmationDialog = false
    
    var body: some View {

        Form {
            Section {
                TextField("Name", text: $name)
            }
            Section {
                VStack {
                    ForEach(0..<50, id: \.self) { number in
                        Text("\(number)")
                    }
                }
            }
            Section {
                Button("Delete Name", role: .destructive) {
                    isShowingConfirmationDialog = true
                }
            }
        }
        
        .confirmationDialog("Are you sure you want to delete name?", isPresented: $isShowingConfirmationDialog) {
            Button("Delete Name", role: .destructive) {
                name = ""
            }
            Button("Cancel", role: .cancel) { }
        } message: {
            Text("Are you sure you want to delete name?")
        }
    }
}