有没有办法在 SwiftUI 中关闭没有动画的模态视图?

Jon*_*ann 5 modal-dialog ios swift swiftui

有没有办法在 SwiftUI 中关闭没有动画的模态视图?

我想在没有关闭动画的情况下关闭模态,因为我想使用视图路由器从模态视图导航到新的 SwiftUI 视图。一切正常,除了从模态视图到新的全屏视图的过渡动画。我按照该教程创建了一个视图路由器:教程

我正在使用该代码片段来呈现模态视图:

struct ContentView: View {

  @State private var showModal = false
  @Environment(\.presentationMode) var presentationMode


  var body: some View {
    Button(action: {
        self.showModal = true
    }) {
        Text("Show modal")
    }.sheet(isPresented: self.$showModal) {
        ModalView()
    }
  }
}


struct ModalView: View {

  @EnvironmentObject var viewRouter: ViewRouter

  var body: some View {
    Group {
      Text("Modal view")
      Button(action: {
         self.viewRouter.currentPage = "New View"
      }) {
        Text("Dismiss")
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

资料来源:@M Reza Farahani 的回答

这是Swift 中的解决方案Swift 解决方案

Gea*_*ten 1

由于我没有 ViewRouter,所以没有完全测试这一点

你应该移动

@Environment(\.presentationMode) var presentationMode
Run Code Online (Sandbox Code Playgroud)

ModalView 并添加

self.presentationMode.wrappedValue.dismiss()
Run Code Online (Sandbox Code Playgroud)

到该 ModalView 中的按钮操作

编辑:

我添加后

.animation(.none)
Run Code Online (Sandbox Code Playgroud)

到 ModalView 它对我有用

好吧,这是一个丑陋的**评论,所以把它放在这里:

    struct ModalView: View {

//  @EnvironmentObject var viewRouter: ViewRouter
    @Environment(\.presentationMode) var presentationMode

  var body: some View {
    Group {
      Text("Modal view")
      Button(action: {
//         self.viewRouter.currentPage = "New View"
        self.presentationMode.wrappedValue.dismiss()

      }) {
        Text("Dismiss")
      }
    }
    .animation(.none)
  }
}
Run Code Online (Sandbox Code Playgroud)