SWIFTUI:在视图中导航并返回

Posted

技术标签:

【中文标题】SWIFTUI:在视图中导航并返回【英文标题】:SWIFTUI : navigate in view and go back 【发布时间】: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)))

            
        
    

谢谢

【问题讨论】:

我建议添加一些代码来演示您的问题。 我已经编辑了我的第一篇文章 【参考方案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)

【讨论】:

我有这个代码***.com/questions/59502896/…,当我想使用 sessionStore.session 来更改视图显示时,什么都没有发生...... 我发现,我没有返回信息,它只是一个本地变量...我怎样才能获得表示用户已登录的变量?

以上是关于SWIFTUI:在视图中导航并返回的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI中NavigationLink多层嵌套导航无法返回上一层的原因及解决

SwiftUI:导航返回时如何平滑过渡bottomBar工具栏?

在 SwiftUI 中放置在导航堆栈中时滚动视图的背景颜色

如何在 SwiftUI 中再次初始化 View?

如何在 SwiftUI 中动态隐藏导航返回按钮

SwiftUI 无法使用 navigationLink 来回导航