【问题标题】:SWIFTUI : navigate in view and go backSWIFTUI:在视图中导航并返回
【发布时间】:2020-04-04 21:25:18
【问题描述】:

我有一个关于 swift 的问题。如何导航到视图?

现在,我的 ContentView 在条件 (if) 中显示启动屏幕、登录或 HomeView。

    var body: some View {

    VStack {

        if (sessionStore.session != nil) {

            UserProfileView(userProfile: self.profile ??  UserProfile(uid: "", firstName: "", lastName: "", birth: "", email: "", phone: ""))

        } else if show || UserDefaults.standard.bool(forKey: initialLaunchKey){

            AuthentificationView().transition(.move(edge: .bottom))

        } else {

            PageViewContainer( viewControllers: Page.getAll.map({  UIHostingController(rootView: PageView(page: $0) ) }), presentSignupView: { withAnimation { self.show = true }; UserDefaults.standard.set(true, forKey: self.initialLaunchKey) }).transition(.scale)
        }
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity)
    .background(Color.backgroundColor)
    .onTapGesture { UIApplication.shared.endEditing() }
}

但是如果我在 LoginView 中,即使我在 contentView 中对 HomeView 的条件为真,我也不会去 HomeView...

我通过可观察对象中的 var 导航到视图(页面 =1 然后页面 =2...)我认为这不是更好的方法...

struct AuthentificationView: View {

    @EnvironmentObject var userSignup: UserSignup


    var body: some View {

        VStack {

            if (userSignup.page >= 1) {

                SignupView()
                    .transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))

            } else {

                LoginView()
                    .transition(.asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing)))

            }
        }
    }
}

谢谢

【问题讨论】:

  • 我建议添加一些代码来演示您的问题。
  • 我已经编辑了我的第一篇文章

标签: swiftui swift5


【解决方案1】:

我无法测试您的代码(由于缺少自定义内容),因此请根据经验尝试以下操作

  • 为每个带有过渡的视图使用显式条件
  • 使过渡动画化
  • 使容器保持动画化

如下图(略)

var body: some View {

    VStack {

        if userSignup.page >= 1 {

            SignupView()
                .transition(AnyTransition.asymmetric(insertion: .move(edge: .trailing), 
                removal: .move(edge: .leading)).animation(.default))

        } 
        if userSignup.page == 0 {

            LoginView()
                .transition(AnyTransition.asymmetric(insertion: .move(edge: .leading), 
                removal: .move(edge: .trailing)).animation(.default))

        }
    }.animation(.default)
}

【讨论】:

  • 我有这个代码stackoverflow.com/questions/59502896/…,当我想使用 sessionStore.session 来更改视图显示时,什么都没有发生......
  • 我发现,我没有返回信息,它只是一个本地变量...我怎样才能获得表示用户已登录的变量?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多