SwiftUI条件视图转换不起作用 [英] SwiftUI Conditional View Transitions are not working

查看:108
本文介绍了SwiftUI条件视图转换不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑以下代码:

class ApplicationHostingView: ObservableObject {
  @Published var value: Bool
}

struct ApplicationHostingView: View {
  // view model env obj
  var body: some View {
    Group {
      if applicationHostingViewModel.value {
        LoginView()
          .transition(.move(edge: .leading)) // <<<< Transition for Login View
      } else {
        IntroView()
      }
    }
  }
}

struct IntroView: View {
  // view model env obj
  var body: some View {
    Button(action: { applicationHostingViewModel.value = true }) {
      Text("Continue")
    }
  }
}

struct LoginView: View {
  var body: some View {
    Text("Hello World")
  }
}

问题

在这种情况下,我可以看到从IntroView到LoginView的过渡效果很好,除了任何动画之外.基于条件的IntroView内的动画效果不错,但更改整个屏幕的过渡效果似乎无效.

ISSUE

In this case, I see my transition from IntroView to LoginView work fine except for any of the animations. Animations inside IntroView based on the conditionals seem to be working fine but transitions that change the entire screen don't seem to work.

推荐答案

  1. group 更改为 ZStack

在某处添加动画.

            class ApplicationHostingViewModel: ObservableObject {
                  @Published var value: Bool = false
                }

                struct ApplicationHostingView: View {
                  // view model env obj
                    @ObservedObject var applicationHostingViewModel : ApplicationHostingViewModel
                  var body: some View {
                    ZStack {

                      if applicationHostingViewModel.value {
                        LoginView()
                          .transition(.move(edge: .leading))
                      } else {
                        IntroView(applicationHostingViewModel:applicationHostingViewModel)
                      }
                    }
                  }
                }

                struct IntroView: View {
                  // view model env obj
                     @ObservedObject var applicationHostingViewModel : ApplicationHostingViewModel
                  var body: some View {
                    Button(action: {
                        withAnimation(.default){
                            self.applicationHostingViewModel.value = true} }) {
                      Text("Continue")
                    }
                  }
                }

                struct LoginView: View {
                  var body: some View {
                    Text("Hello World").frame(maxWidth: .infinity, maxHeight:  .infinity)
                  }
                }

这篇关于SwiftUI条件视图转换不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆