Comment masquer la barre de navigation sur le premier écran en Swift : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi masquer la barre de navigation est un casse-tête pour les débutants ?

\n\n

Avez-vous déjà été confronté à cette situation : vous créez une application, le premier écran doit ressembler à une page d’atterrissage plein écran, sans la barre grise en haut, alors que sur le deuxième écran, la barre de navigation est nécessaire pour la navigation ? Logiquement, il suffirait d’écrire navigationController?.isNavigationBarHidden = true dans le viewDidLoad. Mais c’est là que la magie opère : la barre de navigation peut « réapparaître » lors du retour depuis un autre écran, l’animation se casse, ou elle ne se masque tout simplement pas.

\n\n

C’est l’une des questions les plus populaires sur Stack Overflow (le sujet « How to hide a navigation bar from first ViewController in Swift? » a recueilli des milliers de vues). Dans ce tutoriel, nous aborderons non seulement la solution de base, mais aussi les points subtils : comment le faire proprement, sans bugs d’animation, et comment l’adapter aux normes iOS modernes. Si vous cherchez une méthode fiable pour masquer la barre de navigation sur le premier écran en Swift, vous êtes au bon endroit.

\n\n

Le problème : que se passe-t-il « sous le capot » ?

\n\n

Lorsque vous utilisez UINavigationController, il gère la barre de navigation pour tous les contrôleurs enfants. Si vous la masquez simplement dans le viewDidLoad du premier ViewController, lors de la transition vers le deuxième écran et du retour en arrière, la propriété peut être réinitialisée. Pourquoi ?

\n\n
    \n
  • viewDidLoad n’est appelé qu’une seule fois — lors de l’affichage ultérieur de l’écran, le code ne s’exécute pas.
  • \n
  • UINavigationController synchronise la barre en fonction du dernier contrôleur dans la pile.
  • \n
  • L’animation de transition peut « figer » l’état si les paramètres animated ne sont pas définis.
  • \n
\n\n

Mais ne vous inquiétez pas — la solution est élégante et simple. Écrivons le code.

\n\n

Solution de base : masquer la barre de navigation dans le premier ViewController

\n\n

La méthode la plus directe consiste à redéfinir la méthode viewWillAppear. Pourquoi ici ? Parce que cette méthode est appelée à chaque fois avant l’affichage de l’écran, contrairement à viewDidLoad. Ainsi, même après un retour depuis un autre écran, la barre de navigation sera à nouveau masquée.

\n\n

Étape 1 : Créer le premier ViewController

\n\n

Supposons que vous ayez un FirstViewController qui est la racine du UINavigationController.

\n\n
import UIKit\n\nclass FirstViewController: UIViewController {\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        // Masquer la barre de navigation sans animation\n        navigationController?.setNavigationBarHidden(true, animated: animated)\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        // Réafficher la barre de navigation en quittant l’écran\n        navigationController?.setNavigationBarHidden(false, animated: animated)\n    }\n}
\n\n

Remarque : nous utilisons setNavigationBarHidden(_:animated:) avec le paramètre animated. Si vous passez true, la barre de navigation se masquera/s’affichera avec une animation synchronisée avec la transition. Cela donne un rendu professionnel.

\n\n

Étape 2 : Configurer le deuxième écran

\n\n

Sur le deuxième écran (SecondViewController), la barre de navigation s’affichera par défaut. Aucun code supplémentaire n’est nécessaire — elle apparaîtra automatiquement lors de la transition.

\n\n

Étape 3 : Vérifier dans Interface Builder ou dans le code

\n\n

Assurez-vous que votre UINavigationController est correctement configuré. Si vous utilisez Storyboard, vérifiez que le premier écran est bien FirstViewController. Si c’est dans le code :

\n\n
let navController = UINavigationController(rootViewController: FirstViewController())
\n\n

Terminé ! Lancez l’application — le premier écran sera sans barre de navigation, le deuxième avec.

\n\n

Techniques avancées : animation et SwiftUI

\n\n

La solution de base fonctionne, mais dans des applications réelles, p

Blogs

Book Recommendations