Как добавить пользовательскую кнопку назад в панели навигации в SwiftUI - PullRequest
0 голосов
/ 11 января 2020

Я пытался посмотреть, как добавить настраиваемую кнопку назад навигационной панели в SwiftUI, но я получаю это странное поведение: поведение по умолчанию все еще отображается до того, как показывается пользовательское. Кто-нибудь знает правильный способ добавить его?

Вот что я пытался.

var body: some View {
        NavigationView {
            ZStack {
               Color.background.edgesIgnoringSafeArea(.all)
               NavigationLink(destination: UserDetailsView()) {
                        Text("Continue")
                            .foregroundColor(.background)
                            .font(.title)
                            .fontWeight(.semibold)
                    }
                    .frame(width: 250, height: 60, alignment: .center)
                    .background(Color.white)
                    .cornerRadius(40)
                    .padding(.top, 50)
            }
            .navigationBarTitle("", displayMode: .automatic)
            .navigationBarHidden(true)
        }
      }

Здесь, когда я использую приведенный ниже код, чтобы скрыть кнопку назад, он даже не скрывается вообще .

.navigationBarBackButtonHidden(true)

На подробном экране

  var body: some View {
        NavigationView {
            VStack {
                ZStack {
                    Rectangle()
                        .foregroundColor(.clear)
                        .background(gradient)
                        .edgesIgnoringSafeArea(.all)

                    Text("Hello")
                }
            }
            .navigationBarItems(leading: BackButton(presentationMode: presentationMode))
        }
    }

Пользовательская кнопка возврата выглядит следующим образом

struct BackButton: View {
    var presentationMode : Binding<PresentationMode>

    var body: some View {
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        }) {
            HStack {
                Image(Icon.leftArrow)
                    .aspectRatio(contentMode: .fit)
                    .foregroundColor(.black)
            }
        }
    }
}

Вот как это выглядит enter image description here

Ответы [ 3 ]

0 голосов
/ 11 января 2020

у меня это нормально работает

struct SettingsChoiseView: View {
    @Environment(\.presentationMode) var presentationMode
    var body: some View {
        List{
            ....
        }
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading:
                    Button(action: goBack) {
                        HStack {
                            Image(systemName: "arrow.left.circle")
                            Text("Select session")
                        }                       
                    }
                ) 
    }
    func goBack(){
        //here I save CoreData context if it changes
        self.presentationMode.wrappedValue.dismiss()
    }
}
0 голосов
/ 14 февраля 2020

Спасибо за подсказки. Это работает для меня .... НО после добавления

.navigationBarItems(leading:  ... 

обратная связь swipe-to- go больше не работает. Я предполагаю, что это ошибка в SwiftUI?

Кто-нибудь нашел обходной путь для этого?

0 голосов
/ 11 января 2020

Следующая конфигурация работает (проверено с Xcode 11.2 / iOS 13.2)

var body: some View {
  NavigationView {
      ZStack {
         // ...
         NavigationLink(destination:
                           UserDetailsView()
                               .navigationBarTitle("", displayMode: .inline)
                               .navigationBarHidden(true)
         ) {
                    // ...
           }
      }
      .navigationBarTitle("", displayMode: .inline)
      .navigationBarHidden(true)
      .navigationBarBackButtonHidden(true)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...