【问题标题】:SwiftUI navigationView getting back only from second screen and not from the next onesSwiftUI navigationView 仅从第二个屏幕返回,而不是从下一个屏幕返回
【发布时间】:2020-08-05 15:02:39
【问题描述】:

我遇到了 SwiftUI 的问题。 基本上这是我的视图:

View1 -> View2 -> View3 -> 等等

现在我想在 View2 中显示一个后退按钮,但是当用户查看 3 时,它不应该是可见的。 我尝试隐藏和删除项目,但我仍然可以在下一个视图上看到返回按钮,这将使我回到 View1。

【问题讨论】:

  • 你会展示你的代码吗?
  • @Asperi 这是一个相当大的代码,通常我有 View1 和 NavigationView 和 navigationView 到 View2,我想在其中显示一个后退按钮,它也有带有 navigationLink 到 View3 的导航视图,我不想要不再有返回按钮

标签: ios swift swiftui


【解决方案1】:

由于我无法以纯正的方式做到这一点,我创建了一个自定义按钮,带有关闭动作,它有内容,如果只有属性 isShowingButton 为真,动作就可以工作,然后在进入下一个视图时我将它切换到错误的。它有效,也许不是最好的方式,但有效。如果有人知道更好的方法来解决它,我将不胜感激

【讨论】:

    【解决方案2】:

    如果没有看到您的代码,很难判断问题出在哪里。

    但是以下代码对我有用

    struct ContentView: View {
    
        var body: some View {
            NavigationView {
                FirstView()
            }
        }
    }
    
    struct FirstView: View {
    
        var body: some View {
            NavigationLink(destination: SecondView()
            ) {
                Text("Go to Second View")
    
            }
            .navigationBarTitle("FirstView", displayMode: .inline)
    
        }
    }
    
    struct SecondView: View {
    
        var body: some View {
            NavigationLink(destination: ThirdView().navigationBarBackButtonHidden(true)
            ) {
                Text("Go to Third View")
            }
            .navigationBarTitle("SecondView", displayMode: .inline)
        }
    }
    
    struct ThirdView: View {
    
        var body: some View {
                Text("Third View without Back Button")
            .navigationBarTitle("Third View", displayMode: .inline)
        }
    }
    

    【讨论】:

    • 啊,您正在使用内容视图,省略 NavigationView,很好!谢谢?
    【解决方案3】:

    导航到 View 3 时,您需要将 .navigationBarBackButtonHidden(true) 添加到 NagivationLink

    struct ViewTwo: View {
    
    var body: some View {
        NavigationLink(destination: SecondView().navigationBarBackButtonHidden(true)
        ) {
            Text("Go to View 3")
    
        }
        .navigationBarTitle("View 2", displayMode: .inline)
    
    }
    

    }

    【讨论】:

    • 不幸的是,在第三个视图上仍然显示返回按钮。我一直在尝试这些 navigationBarBackButtonHidden(true) 和 .navigationBarHidden(true) 的所有组合,但如果它存在于上一个视图中,我无法在下一个视图中隐藏它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    相关资源
    最近更新 更多