Я работаю с SwiftUI приложением, которое использует NavigationView
для перехода с экранов.
У меня есть требование установить цвет фона на панели навигации и иметь нашел код, который делает эту работу большую часть времени.
Когда приложение запускается в портретном режиме, все работает правильно при поворотах.
Однако, когда приложение запускается в ландшафтном режиме, панель по умолчанию является серой по умолчанию и обновляется только после первого поворота.
Ниже приведен минимальный объем кода для воссоздания моей проблемы:
import SwiftUI
struct ContentView: View {
var body: some View {
return NavigationView {
List {
NavigationLink(destination: Text("A")) {
Text("See A")
}
}
.background(NavigationConfigurator { navigationConfigurator in
navigationConfigurator.navigationBar.barTintColor = .orange
})
.navigationBarTitle(Text(verbatim: "Home"), displayMode: .inline)
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct NavigationConfigurator: UIViewControllerRepresentable {
var configure: (UINavigationController) -> Void = { _ in }
func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationConfigurator>) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController,
context: UIViewControllerRepresentableContext<NavigationConfigurator>) {
if let navigationController = uiViewController.navigationController {
self.configure(navigationController)
print("Successfully obtained navigation controller")
} else {
print("Failed to obtain navigation controller")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Как приложение отображается при запуске в книжной ориентации режим:
... и повернут в горизонтальную плоскость ...
Наконец, как это выглядит при запуске в ландшафтном режиме.
Я также вышел из системы NavigationConfigurator
и обнаружил, что когда запускается в портретном режиме, делается два звонка. Первый не может найти контроллер навигации, но второй не находит.
Когда я запускаю в ландшафтном режиме, выполняется только один вызов, который не может его найти. После поворота он находит его и успешно обновляет цвет.
Я пытался принудительно вызвать redr aws с помощью управления @State
, но это не удалось.
Не удалось заблокировать приложение в портретном режиме у меня кончились идеи.