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

Posted

技术标签:

【中文标题】栏项中的导航链接返回到 NavigationView 的顶部【英文标题】:Navigation Link in bar Items goes back to top of NavigationView 【发布时间】:2020-09-23 16:25:09 【问题描述】:
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")
                                     ))
    

当单击 TestViews navigationBarItems 内的 NavigationLink 时,它导航到视图 3。当我单击后退按钮时,它不会返回到 TestView,而是一直返回到测试。

如何让它回到上一个视图而不是第一个视图?

我正在使用 Xcode 12。

【问题讨论】:

它在 Xcode12 上对我来说很好用,也许还有别的东西? 我在这个文件中除了PreviewProvider 之外没有其他任何东西,它只是用于实时预览 【参考方案1】:

将导航链接放入导航视图主体(导航视图中没有栏)

所以这是可能的方法

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

【讨论】:

我已经尝试过了,它目前在按下时无法导航到视图 3。我使用 isActive 切换在Button 操作中放置了一个打印语句,它被按下,但导航不起作用。 已修复 - 在此处输入但忘记了一个参数。见更新。使用 Xcode 12 / ios 14 测试。 这完全符合我的要求。我是否必须为每个视图执行这种类型的逻辑,以便在单击条形按钮时触发NavigationLink?似乎代码会随着您拥有的更多条形按钮而变得非常混乱。 NavigationLink 应该在主体中放置在 NavigationView 的堆栈中,如何设计它以供重用,取决于您。此外,请记住,自 iOS 14 起,navigationBarItems 修饰符已被弃用,而使用工具栏。请注意。

以上是关于栏项中的导航链接返回到 NavigationView 的顶部的主要内容,如果未能解决你的问题,请参考以下文章

如何使用导航栏项转到其他视图控制器?

带有 url 更新和超链接支持的 Flutter web 底部导航栏

导航滚动到列表项中的匹配元素

更改活动导航项的颜色并显示相对于导航栏项的页面

我不能在故事板中同时将标题和图像设置为导航栏上的右侧栏项吗?

如何使导航栏项 CSS 居中