如何在SwiftUI中隐藏导航返回按钮?

68
navigationBarBackButtonHidden(_ hidesBackButton: Bool) -> some View

但它仍然显示返回按钮,我想在单击时删除返回功能。


欢迎来到SO!您能否展示更多的代码?(甚至可以将其格式化为代码吗?)这对我们复制您的问题会很有帮助。 - user7014451
5个回答

88
也许:
.navigationBarBackButtonHidden(true)

适用于XCode 12.1。 - Spanomaly

25

我尝试将.navigationBarBackButtonHidden(true)放在几个不同的位置。这是我观察到的行为。

struct PageOne: View {
    var body: some View {
        NavigationView {
            VStack{
                NavigationLink(destination: PageTwo()){
                    Text("Go to Page Two")
                }
            }
        }
    }
}

// Hide from page 2 -> page 1
struct PageTwo: View {
    var body: some View {
        VStack{
            NavigationLink(destination: PageThree()){
                Text("Go to Page Three")
            }.navigationBarBackButtonHidden(true)
        }
    }
}

// Hide from page 3 -> page 2 (Same behaviour as Kheldar's answer above)
struct PageTwo: View {
    var body: some View {
        VStack{
            NavigationLink(destination: PageThree().navigationBarBackButtonHidden(true)){
                Text("Go to Page Three")
            }
        }
    }
}


struct PageThree: View {
    var body: some View {
        Text("Hello!")
    }
}

20

通过导航链接使用

NavigationLink(destination: SomePage().navigationBarBackButtonHidden(true), tag: 1, selection: $selection) {
    //..
}

.navigationBarBackButtonHidden(true)会隐藏返回按钮。


1
我仍然有点烦恼,因为我必须在每个导航链接中放置它。但是,在链接中编写它比将其放置在视图实现底部更整洁。 - CDM social medias in bio
这对我来说是正确的答案。我正在使用带有iOS 16的Xcode 14.2。 - marticztn
@CDMsocialmediasinbio 欢迎来到 SwiftUI 的绝对烂摊子... 从这里开始,情况不会变得更好。 - undefined

18

这是解决方法,但它在Xcode 11 beta 4上不起作用:

struct LiveView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: ButtonView()) {
                Text("Next screen")
            }
        }
    }
}

struct ButtonView: View {
    @State var navigationBarBackButtonHidden = true

    var body: some View {
        Button("Show back") {
            self.navigationBarBackButtonHidden = false
        }.navigationBarBackButtonHidden(navigationBarBackButtonHidden)
    }
}

还有navigationBarHidden,在iPhone上不起作用,但在watchOS上可以完美运行。


这是最有帮助、最完整的解决方案。 - Zack Shapiro

13
我遇到了这样一种情况,即使我使用.navigationBarBackButtonHidden(true)代码,也不能起作用,直到我将其放置在嵌入在NavigationLink中的视图上。请注意保留HTML标签。
NavigationLink(destination:MyView(stuff: aStuff, onDismiss: {})) {
         HStack {
             Text(aStuff.interestingText)
         }
} // <- used to set it here, doesn't work for me

使用:

struct MyView: View {

    var aStuff: Stuff
    var onDismiss: () -> Void

    var body: some View {
          VStack(alignment: .leading) {
               Button(action: self.onDismiss) {
                   Image(systemName: "chevron.left.circle")
               }
               CoolAnimatedStuffDisplayer(stuff: aStuff)
          }
          .navigationBarBackButtonHidden(true) // <--- works here
    }
}

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