如何知道 SwiftUI 演示何时完成?

Hae*_*nsl 5 swiftui swiftui-navigationlink swiftui-animation swiftui-navigationview

我想知道我的 SwiftUI 视图何时完成其转换/动画,以便安全地呈现其他视图/模式。

例子:

我在视图 A 中显示工作表 A。在工作表 AI 中,点击一个按钮可关闭工作表 A、从视图 A 转换到视图 B,并在视图 B 的顶部显示工作表 B。

一个幼稚的实现,例如用真实的绑定/状态初始化视图 B 以显示工作表 B,将导致以下形式的错误:

[Presentation] Attempt to present <_TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView_: 0x107a03a00> on <_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__: 0x107821800> (from <_TtGC7SwiftUI19UIHostingControllerVVS_19BridgedPresentation8RootView_: 0x107a1a200>) while a presentation is in progress.
Run Code Online (Sandbox Code Playgroud)

这意味着我们需要等待视图 B 完成其转换,然后才能呈现工作表 B。

我知道我可以...

  • ...添加 aNavigationStack/View.sheet()从工作表 A 导航到工作表 B。但是,为了向用户提供上下文,我希望将视图 B 放在工作表 B 后面。
  • ...在显示工作表 B 之前等待几毫秒,因此可能确保视图 B 已完成转换。例如
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
      // trigger sheet
    }
    
    Run Code Online (Sandbox Code Playgroud)

等待秒钟对我来说似乎非常不确定,这就是为什么我想知道是否有一个更优雅的解决方案来解决这个问题。