在SwiftUI中是否有一种方法可以无动画地关闭模态视图?

7

有没有一种方法可以在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")
      }
    }
  }
}

来源:M Reza Farahani的回答

以下是Swift的解决方案:Swift解决方案

1个回答

0

由于我没有ViewRouter,因此没有完全测试此内容

您应该移动

@Environment(\.presentationMode) var presentationMode

ModalView 和 add

self.presentationMode.wrappedValue.dismiss()

与 ModalView 中的按钮操作相关:

编辑:

在我添加之后

.animation(.none)

对于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)
  }
}

1
啊,真奇怪。我在模拟器上测试过了,认为它会给出你想要的结果,但当我在真实设备上构建时,它仍然会动画化。 - Geart Otten
1
让我们在聊天中继续这个讨论 - Geart Otten
@GeartOtten 我也无法在没有动画的情况下解除。你能指导一下吗? - Tul
@Tul 我已经尝试使用上面的解决方案,但它似乎只适用于模拟器而不是真实设备。我不确定该如何正确修复它。 - Geart Otten
这表明了SwiftUI的功能不完整,以及为什么我现在不得不支持一个之前的开发者选择了这个非生产就绪技术的iOS应用程序感到痛苦。我猜它已经可以用于一些更简单的应用程序,但我的客户不断要求在这样的领域进行定制,而SwiftUI目前还无法做到这一点。 - DiggyJohn
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接