首页 > 解决方案 > SwiftUI 多屏导航

问题描述

我对 SwiftUI 中导航的工作方式有点困惑。是否只有开始导航的视图需要一个NavigationView?我有一个视图,一个视图具有NavigationView第二NavigationLink个视图。然后第二个视图具有NavigationLink第三个和最后一个视图。

但是,当我的第二个视图导航到第三个视图时,我在日志中收到以下消息:

unbalanced calls to begin/end appearance transitions for <_TtGC7SwiftUI19UIHostingControllerVS_7AnyView_: 0x7f85d844bf90>.

我不知道我是否正确处理了多个屏幕的导航,并且我遇到了一些非常奇怪的行为,在我的第二个屏幕上按 Next 会以某种方式让我回到我的第一个屏幕......

//This is the link in my first view, my seconds link is the same except it does to my next step and the tag is different
NavigationLink(
    destination: PasswordView(store: self.store),
    tag: RegisterState.Step.password,
    selection: .constant(store.value.step)
)

标签: swiftswiftui

解决方案


在 SwiftUI 中导航有点棘手,创建一个导航视图后,您无需在第二或第三视图中再次创建。我不确定你是如何首先创建它的。这是导航如何工作的示例。

import SwiftUI

struct ContentView: View {
       var body: some View {
            NavigationView {
                VStack {
                    NavigationLink(destination: SecondView()) {
                    Text("Show Second View")
                }.navigationBarTitle("FirstView", displayMode: .inline)
            }
        }
    }
}

struct SecondView: View {
    var body: some View {
        NavigationLink(destination: ThirdView()) {
            Text("Show Third view")
        }.navigationBarTitle("SecondView", displayMode: .inline)
    }    
}

struct ThirdView: View {
    var body: some View {
        Text("This is third view")
            .navigationBarTitle("ThirdView", displayMode: .inline)
    }
}

推荐阅读