Je suis tombé sur ce problème hier aussi.
Je présente un modal UINavigationController
avec un UIViewController
en tant que rootViewController
, qui intègre une vue SwiftUI via UIHostingController
.
Le fait de définir le setNavigationBarHidden
habituel dans viewDidAppear
du UIViewController
cesse de fonctionner dès que la vue SwiftUI est intégrée.
Vue d'ensemble:
Root ViewController: setNavigationBarHidden dans viewWillAppear
Barre de Navigation Visible:
UINavigationController > root UIViewController > UIHostingController intégré
Barre de Navigation Invisible:
UINavigationController > root UIViewController > pas de UIHostingController
Après quelques tests de débogage, j'ai réalisé que le UIHostingController
lui-même appelle à nouveau setNavigationBarHidden
.
La raison de ce problème est donc que les UIHostingControllers
modifient la UINavigationBar
environnante de l'UINavigationController
.
Une solution simple:
Définissez la propriété de la barre de navigation dans la première vue SwiftUI présentée qui est intégrée par votre UIHostingController
.
var body: some View {
MyOtherView(viewModel: self.viewModel)
.navigationBarHidden(true)
}
Cela rétablira l'ajustement que SwiftUI et le UIHostingController
tentent d'appliquer à votre UINavigationController
environnant.
Comme il n'y a aucune garantie concernant l'interaction entre SwiftUI et UIKit (qu'il utilise UIKit sous-jacent), je recommanderais de garder le setNavigationBarHidden
dans le viewDidAppear
environnant avec ce modificateur également.