首页 > 解决方案 > PresentationMode.wrappedValue.dismiss() 的完成处理程序

问题描述

我目前通过执行以下操作来消除视图:

struct DestinationView: View {
    @Environment(\.presentationMode) private var presentationMode
    var onDismiss: () -> Void

    var body: some View {
        Button("Dismiss") {
            presentationMode.wrappedValue.dismiss()
            onDismiss()
        }
    }
}

一旦视图被关闭,我通过调用onDismiss触发父视图中的操作来通知父视图。
但是,我的动作触发得太早了,因为在调用时onDismiss,这个视图还没有完成关闭,因此我在父视图中看到了与比赛条件相关的问题。

有没有.dismiss(animated:completion:)我可以利用的等价物?

PS 额外的上下文:
我从一个UIViewControllerRepresentable's coordinator 解散。

标签: iosswiftswiftui

解决方案


您应该延迟调用它以完成动画,例如

Button("Dismiss") {
    presentationMode.wrappedValue.dismiss()
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
       onDismiss()
    }
}

推荐阅读