SwiftUI Как скрыть панель навигации, удерживая кнопку возврата - PullRequest
1 голос
/ 14 июля 2020

Итак, я пытаюсь скрыть панель навигации в представлении Details в SwiftUI. Технически я заставил его работать, используя init () в другом представлении, но проблема в том, что он делает навигационную панель прозрачной для всего приложения, а мне нужно только одно представление. Причина, по которой я не использовал init () в DetailsView, заключается в том, что у меня есть переменная, требующая ввода, поэтому я не знал, как это сделать! Вот код инициализатора:

init() {
    let navBarAppearance = UINavigationBar.appearance()
    navBarAppearance.backgroundColor = .clear
    navBarAppearance.barTintColor = .clear
    navBarAppearance.tintColor = .black
    navBarAppearance.setBackgroundImage(UIImage(), for: .default)
    navBarAppearance.shadowImage = UIImage()
}

Вот как выглядит код Content View и Details View с init () внутри detailsView:

// ContentView //

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(0..<5) { i in
                    NavigationLink(destination: DetailsView(test: 1)) {
                        Text("DetailsView \(i)")
                    }
                }
                
            }
            .listStyle(InsetGroupedListStyle())
            .navigationBarTitle("Test App")
        }
    }
}

// DetailsView //

struct DetailsView: View {
    
    var test: Int
    
    var body: some View {
        ScrollView {
            Text("More Cool \(test)")
            Text("Cool \(test)")
            Text("Less Cool \(test)")
        }
    }
    
    init(test: Int) {
        self.test = 8
        let navBarAppearance = UINavigationBar.appearance()
        navBarAppearance.backgroundColor = .clear
        navBarAppearance.barTintColor = .clear
        navBarAppearance.tintColor = .black
        navBarAppearance.setBackgroundImage(UIImage(), for: .default)
        navBarAppearance.shadowImage = UIImage()
    }
}

struct DetailsView_Previews: PreviewProvider {
    static var previews: some View {
        DetailsView(test: 8)
    }
}

Это сильно отредактированная версия моего кода, но она показывает мою проблему. Без необходимости передавать переменные, init () удалял полосу только в этом представлении. Однако при вводе этой переменной он не только изменяет все представления на «8» для числа, но также даже не скрывает панель навигации. Я не уверен, что я просто делаю что-то не так, или это даже правильный способ сделать это, но любая помощь будет принята с благодарностью! скрыть statusBar в iOS 14 с помощью NavigationView?

1 Ответ

2 голосов
/ 15 июля 2020

Я думаю, вы пытаетесь использовать UIKit logi c вместо SwiftUI. Это то, что я сделал бы, чтобы скрыть панель навигации с помощью кнопки «Назад» в верхней части вашего представления. Что касается скрытия строки состояния, я бы использовал .statusBar (hidden: true). Но на iOS14 вроде не работает. Это может быть ошибка ... Вы можете обратиться к документации Apple на этом топе c.

struct DetailsView: View {
  
  @Environment(\.presentationMode) var presentation
  
  var test: Int
  
  var body: some View {
    ZStack(alignment: .topLeading) {
      
      ScrollView {
        Text("More Cool \(test)")
        Text("Cool \(test)")
        Text("Less Cool \(test)")
      }
      
      Button(action: { presentation.wrappedValue.dismiss() }) {
        HStack {
          Image(systemName: "chevron.left")
            .foregroundColor(.blue)
            .imageScale(.large)
          Text("Back")
            .font(.title3)
            .foregroundColor(.blue)
        }
      }
      .padding(.leading)
      .padding(.top)
    }
    .navigationTitle(Text(""))
    .navigationBarHidden(true)
    .statusBar(hidden: true)
  }
}
...