导航栏中的链接项返回到 NavigationView 的顶部

5
struct Testing: View {

    var body: some View {
        NavigationView{
            VStack {
                Text("View 1")
                Text("View 1.3")
            
                NavigationLink(destination: TestView(),
                                    label: {
                                        Text("View 1 navigation")
                                    })
            }
        }
    }
}

struct TestView: View {

    var body: some View {
            VStack {
                Text("View 2")
            }
            .navigationBarItems(trailing:NavigationLink(
                                    destination: Text("View 3"),
                                    label: {
                                        Text("Navigate")
                                     }))
    }
}

在TestView的navigationBarItems中点击NavigationLink,它会导航到View 3。但是当我点击返回按钮时,它不会返回到TestView,而是直接返回Testing。

我该如何使其返回到先前的视图而不是第一个视图?

我正在使用Xcode 12。


在我的Xcode12上它运行良好,也许还有其他问题? - Itay Brenner
除了“PreviewProvider”用于实时预览之外,我在这个文件中没有其他内容。 - runemonster
1个回答

4

将导航链接放入导航视图的主体中(栏不在导航视图中)

这里是可能的方法:

struct TestView: View {
    @State private var isActive = false

    var body: some View {
            VStack {
                Text("View 2")
            }
            .background(
               NavigationLink(destination: Text("View 3"), isActive: $isActive,
                label: { EmptyView() })
            )
            .navigationBarItems(trailing:
               Button("Navigate", action: { self.isActive = true }))
    }
}

我已经尝试过这个,但当前在按下时无法导航到View 3。我在Button操作中放置了一个带有isActive切换的打印语句,它被按下了,但导航不起作用。 - runemonster
修复 - 输入时漏掉了一个参数。请查看更新。已在 Xcode 12 / iOS 14 上进行测试。 - Asperi
这正是我想要的效果。我是否需要为每个视图都编写这种逻辑,以便在单击栏按钮时触发“NavigationLink”?随着拥有更多栏按钮,代码似乎会变得相当混乱。 - runemonster
1
NavigationLink 应该放在 NavigationView 的主体中,以便放置在堆栈中。如何设计以实现重用取决于您。此外,请记住,navigationBarItems 修饰符已被弃用,iOS 14 更推荐使用 toolbar。只需注意即可。 - Asperi

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