SwiftUI 多屏幕导航

3
我对SwiftUI中的导航方式有点困惑。只需要视图启动导航吗?我有一个带有NavigationView的视图,并且在其中有到第二个视图的NavigationLink。第二个视图然后有到第三个和最终视图的NavigationLink

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

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

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

//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)
)

你可能希望将变量保存在环境中,而不是将它们传递给NavigationLink参数。这样,当您导航回第一个视图并从导航堆栈中弹出第二个视图时,就不会遇到问题了。 - Ryan
1个回答

6

在SwiftUI中,导航有点棘手,在创建一个navigationview之后,在第二个或第三个视图中不需要再创建。我不确定您最初是如何创建它的。以下是一个演示导航如何工作的示例。

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

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