19
votes

Comment masquer le bouton de retour de navigation dans SwiftUI?

navigationBarBackButtonHidden(_ hidesBackButton: Bool) -> some View
But it still shows the back button and I want to remove the back function when clicked.

1 commentaires

Bienvenue à SO! Pourriez-vous s'il vous plaît montrer plus de code? (Peut-être même comme code?) Il serait utile pour nous de dupliquer votre problème.


4 Réponses :


14
votes

C'est la solution, mais cela ne fonctionne pas sur 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)
    }
}

Il y a aussi navigationBarHidden qui ne fonctionne pas sur iPhone mais fonctionne parfaitement sur watchOS.


1 commentaires

C'est la solution la plus complète et la plus utile



18
votes

Peut être:

.navigationBarBackButtonHidden(true)


2 commentaires

Fonctionne avec XCode 12.1


Même avec Xcode 11.7



7
votes

J'ai rencontré une situation où je ne pouvais pas faire fonctionner le .navigationBarBackButtonHidden(true) jusqu'à ce que je le place sur la vue que j'ai intégrée dans le NavigationLink lui-mê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
    }
}

avec:

NavigationLink(destination:MyView(stuff: aStuff, onDismiss: {})) {
         HStack {
             Text(aStuff.interestingText)
         }
} // <- used to set it here, doesn't work for me


0 commentaires

12
votes

J'ai essayé de placer .navigationBarBackButtonHidden(true) à plusieurs endroits. C'est le comportement que j'ai observé. J'espère que cela aide!

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


1 commentaires

Superbe, merci beaucoup, cela a fonctionné pour moi