Comment changer la couleur du texte de la barre d'état dans iOS : 5 erreurs fatales et comment les éviter
\n\nChaque développeur iOS a déjà été confronté à cette situation : vous écrivez une application, vous choisissez un fond sombre parfait pour l'écran, mais la barre d'état (Status Bar) affiche toujours un texte noir. Cela semble au moins non professionnel, et les utilisateurs écrivent dans les avis : « on ne voit rien ». Une douleur familière ?
\n\nLa question « How to change Status Bar text color in iOS » est l'une des plus populaires sur Stack Overflow avec des dizaines de milliers de vues. Le problème est que les débutants (et pas seulement) commettent les mêmes erreurs encore et encore. Dans cet article, nous allons analyser 5 erreurs fatales qui ruinent votre barre d'état, et montrer comment les corriger en Swift. C'est parti !
\n\nPourquoi la barre d'état est-elle un casse-tête ?
\n\niOS est un système strict. Il ne vous permet pas de simplement colorier la barre d'état comme bon vous semble. Tout est géré via UIStatusBarStyle, et si vous ne connaissez pas le mécanisme exact, le code devient un jeu de devinettes. Analysons cela systématiquement.
Erreur n°1 : Oublier le fichier Info.plist
\n\nL'erreur la plus courante est d'essayer de modifier le style de la barre d'état sans l'autoriser dans la configuration du projet. Par défaut, iOS gère lui-même la barre d'état, et votre code est simplement ignoré.
\n\n// ❌ Incorrect : le code existe, mais pas l'autorisation\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return .lightContent\n}\n\nSolution : Ajoutez dans Info.plist la clé UIViewControllerBasedStatusBarAppearance et définissez-la sur YES. Sans cela, votre View Controller n'aura pas le droit de vote.
<key>UIViewControllerBasedStatusBarAppearance</key>\n<true/>\n\nMaintenant, iOS demandera à chaque contrôleur : « Quel style de barre d'état veux-tu ? » — et votre code fonctionnera.
\n\nErreur n°2 : Mauvais emplacement pour le code
\n\nDe nombreux débutants écrivent preferredStatusBarStyle dans la méthode viewDidLoad() ou viewWillAppear(). Et ils sont surpris que rien ne change.
// ❌ Incorrect : c'est une propriété, pas une méthode\noverride func viewDidLoad() {\n super.viewDidLoad()\n preferredStatusBarStyle = .lightContent // Ne fonctionnera pas !\n}\n\nApproche correcte : preferredStatusBarStyle est une propriété calculée (computed property) qu'iOS interroge à chaque fois qu'il doit mettre à jour la barre d'état. Elle doit être déclarée au niveau de la classe, pas à l'intérieur d'une méthode.
// ✅ Correct\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return .lightContent\n}\n\nSi vous devez changer le style dynamiquement (par exemple, lors du changement de thème), utilisez setNeedsStatusBarAppearanceUpdate() :
var isDarkMode = false {\n didSet {\n setNeedsStatusBarAppearanceUpdate()\n }\n}\n\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return isDarkMode ? .lightContent : .default\n}\n\nErreur n°3 : Ignorer le Navigation Controller
\n\nSi votre application utilise UINavigationController, alors preferredStatusBarStyle du contrôleur enfant peut ne pas fonctionner. Pourquoi ? Parce que le Navigation Controller gère lui-même la barre d'état.
Solution n°1 (simple) : Surcharger la propriété dans le Navigation Controller.
\n\nclass CustomNavigationController: UINavigationController {\n override var preferredStatusBarStyle: UIStatusBarStyle {\n return topViewController?.preferredStatusBarStyle ?? .default\n }\n}\n\nSolution n°2 (propre) : Utiliser childForStatusBarStyle. C'est une méthode plus flexible qui délègue la gestion au contrôleur enfant.
class CustomNavigationController: UINavigationC