Après avoir lu toutes les suggestions et essayé quelques choses, je pourrais faire fonctionner cela pour des contrôleurs de vue spécifiques en utilisant les étapes suivantes:
Premier pas:
Ouvrez votre info.plist et insérez une nouvelle clé nommée " Afficher l'apparence de la barre d'état basée sur le contrôleur " sur NON
Deuxième étape (juste une explication, pas besoin de mettre en œuvre ceci):
Normalement, nous mettons le code suivant dans l'application (méthode _: didFinishLaunchingWithOptions :) de l'AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
mais cela affecte le statusBarStyle
de tous les ViewControllers.
Alors, comment faire fonctionner cela pour des ViewControllers spécifiques - Étape finale:
Ouvrez le fichier viewcontroller dans lequel vous souhaitez modifier statusBarStyle
et mettez le code suivant viewWillAppear()
,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
En outre, implémentez la viewWillDisappear()
méthode pour ce viewController spécifique et mettez les lignes de code suivantes,
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Cette étape modifie d'abord le statusBarStyle
pour le contrôleur de vue spécifique, puis default
le redéfinit en lorsque le contrôleur de vue spécifique disparaît. Ne pas mettre en œuvre le viewWillDisappear()
changera statusBarStyle
définitivement la nouvelle valeur définie deUIStatusBarStyle.LightContent
Status bar is initially hidden = YES
dans le fichier info.plist, "Afficher l'apparence de la barre d'état basée sur le contrôleur = NON" provoquera le masquage de la barre d'état.UIStatusBarStyle.Default
utiliserviewWillDisappear()
, vous devriez l'utiliserviewWillAppear()
pour l'initialiser, plutôt queviewDidLoad()
.... sinon, si vous revenez à cette vue sans avoir à la recharger, vous ne verrez pas ce queStatusBarStyle
vous attendez.UIApplication.shared.statusBarStyle = .lightContent
(Au 20 septembre 2019)
Swift 5 , Swift 4.2 , Swift 4
la source
super.viewWillAppear
si vous copiez et collez ce codeUIApplication.shared.statusBarStyle = .lightContent
résultats dans cet avertissement du compilateur: Setter pour 'statusBarStyle' était obsolète dans iOS 9.0: Utilisation - [UIViewController favoriteStatusBarStyle]Solution Swift 4.2 avec NavigationController
Premier pas:
Ouvrez votre info.plist et insérez une nouvelle clé nommée « Afficher l'apparence de la barre d'état basée sur le contrôleur » ou
UIViewControllerBasedStatusBarAppearance
sur YES pour permettre à chaque VC d'utiliser sa propre propriété d'état.Deuxième étape
Dans chaque VC, remplacez la propriété favoriteStatusBarStyle comme ceci:
Dernière étape
Remplacez la propriété favoriteStatusBarStyle dans votre classe NavigationController personnalisée:
la source
J'ai suivi ce tutoriel et cela a fonctionné pour moi. Cependant, je ne sais pas s'il y a des mises en garde.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
surfalse
.AppDelegate.swift
, qui contientdidFinishLaunchingWithOptions
, définissez la couleur souhaitée.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Mise à jour Swift 3 *
UIApplication.shared.statusBarStyle = .lightContent
la source
UIApplication.sharedApplication().statusBarHidden = false
à AppDelegate.swift didFinishLauchingWithOptionsIl y a un milliard de réponses ici alors j'ai pensé pourquoi ne pas en ajouter une autre sous la forme d'une extension (avec l'aide de @ Cœur)
Swift 3
Extension:
La mise en oeuvre:
la source
Dans votre Info.plist, vous devez définir l'apparence de la barre d'état basée sur le contrôleur de vue sur n'importe quelle valeur.
Si vous le définissez OUI, vous devez remplacer la fonction favoriteStatusBarStyle dans chaque contrôleur de vue.
Si vous le définissez NON, vous pouvez définir le style dans AppDelegate en utilisant
la source
setStatusBarStyle
est obsolète dans iOS 9.0la source
valueForKey("statusBar")
peut ne pas être conforme aux directives AppleSwift 3
C'est la solution pour définir la couleur d'arrière-plan de la barre d'état pour un contrôleur de vue spécifique.
la source
SWIFT 2
J'ai réussi à changer l'apparence de l'arrière-plan de la barre d'état en ajoutant ce qui suit dans ma vue
la source
Mettre en œuvre
preferredStatusBarStyle
que vous avez mentionné et appelself.setNeedsStatusBarAppearanceUpdate()
àViewDidLoad
et aussi dans le jeu Info.plistUIViewControllerBasedStatusBarAppearance
àYES
(Il estYES
par défaut)On ne sait pas pourquoi cela ne fonctionne pas.Je dois vérifier le code.Une autre suggestion est d'aller avec le code de travail
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
et de le modifier par défaut lorsque vous voyez disparaîtreviewWillDisappear
.la source
pour swift 3
.plist
AppDelegate.swift
la source
Dans ma situation, j'utilise le storyboard pour organiser mes contrôleurs de vue.Je souhaite modifier tous les styles de barre d'état.
Vous pouvez voir l'image ci-dessous.
Stars
View Controller est unCPBaseNavigationController
, etCPBaseNavigationController
est sous - classe deUINavigationController
.J'essaye de faire les prochains sets:
Dans
AppDelegate.swift
funcdidFinishLaunchingWithOptions
, ajoutezmais aucun effet.
Dans StoryBoard, recherchez le
Base Tab BarController
(image ci-dessus) .selectAttributes Inspector
, changez l'Sattus Bar
attribut enLight Content
.so bad, aucun effet.Dernier je l'obtiens.Dans mon contrôleur de navigation personnalisé
CPBaseNavigationController
, ajoutez funcpreferredStatusBarStyle
Ça marche bien!
En outre,
statusBarStyle
obsolète dans la version 9.0, vous pouvez utiliser-[UIViewController preferredStatusBarStyle]
.la source
Fonctionne pour une application basée sur la navigation
la source
Tout est beaucoup plus facile dans Swift 3.0 Xcode 8
En utilisant le code ci-dessous dans le fichier App Delegate, après
insérez ceci:
la source
Swift 3
la source
Swift 4 Pour un ViewController spécifique sans navigationViewController intégré, ajoutez-le simplement à votre fichier ViewController.
la source
Un autre moyen très simple de faire ce travail consiste simplement à créer une extension de la classe UINavigationController.
Étant donné que le remplacement de la
preferredStatusBarStyle:
méthode ne fonctionnera pas, SAUF, nous le faisons à l'intérieur de la classe UINavigationController.la source
J'avais défini une couleur spécifique (au format RVB) en utilisant le code ci-dessous dans le
App Delegate
fichier:Vous devez également ajouter la clé ci-dessous dans le
Info.plist
fichier:Afficher l'apparence de la barre d'état basée sur le contrôleur avec la valeur booléenne définie sur NON
la source
Je peux vous suggérer un moyen plus simple,
Cela a fonctionné pour moi dans iOS 10.1.
Objectif c
Rapide
Je suis surpris que personne ne l'ait signalé. En tout cas profitez-en :)
la source
J'ai eu quelques problèmes avec celui-ci. Je ne me sentais pas vraiment bien à l'idée de changer globalement la couleur de la barre d'état dans la vue, puis de la changer à nouveau à la vue a disparu comme la réponse acceptée. Croyez-le ou non, vous pouvez faire fonctionner cela en remplaçant
preferredStatusBarStyle
le contrôleur de vue souhaité. Après beaucoup de temps, voici ce que j'ai fait pour le faire fonctionner:info.plist
sur OUI.preferredStatusBarStyle
.modalPresentationCapturesStatusBarAppearance
sur Oui.De plus, si vous avez des contrôleurs de vue intégrés, comme dans un contrôleur de navigation par exemple, il demandera au contrôleur de vue le plus haut le style de la barre d'état. Remplacer
childViewControllerForStatusBarStyle
et passer le contrôleur de vue intégré est censé fonctionner, mais ce n'est pas le cas pour moi. Je viens donc de renvoyer la barre d'état préférée des contrôleurs de vue intégrés comme style de barre d'état préféré. Quelque chose comme ça:la source
UINavigationController
-classer et remplacer lechildViewControllerForStatusBarStyle
var là-dedans, en revenantself.topViewController
.Dans Swift 4 ou 4.2
Vous pouvez ajouter sur votre vc
et définissez la valeur de retour sur
ex:
la source
(Au 10 juin 2020)
Swift 5 ( sans
.Plist
fichier d' édition )Si vous utilisez
Storyboard
, accédez auNavigationController
, sélectionnez lenavigationBar
, cliquez surAttributes Inspector
, puis modifiez lestyle
. si vous avez besoin delight content
( barre d'état blanche ), définissez-le quoi que ce soit saufdefault
disons définir le styleblack
Et si vous voulezdark content
( barre d'état noire ), réglez-ledefault
.La valeur par défaut (
UIBarStyleDefault
) entraîne laUIStatusBarStyleDefault
barre d'état sombre au premier plan . EtUIBarStyleBlack
donnera uneUIStatusBarStyleLightContent
barre d'état.Par programme
Sans barre de navigation ( Modifier
.Plist
)ajoutez
UIViewControllerBasedStatusBarAppearance
/View controller-based status bar appearance
à votreinfo.plist
, et la valeur définie esttrue
.Override
lapreferredStatusBarStyle
propriété dans votre contrôleurla source
Mise à jour Swift 3.0
la source
Ce qui a fonctionné avec moi, dans le Storyboard, allez dans le contrôleur de navigation, sélectionnez la barre de navigation, cliquez sur l'inspecteur d'attributs, puis changez le style par défaut en noir. C'est tout!
la source
SWIFT 4.2 Hé, je voulais partager une solution, qui a fonctionné pour moi, que j'ai obtenue d'un excellent article sur ce sujet ellusif de Graig Grummitt.
Étape 1 Comme d'autres l'ont mentionné, ajoutez ci-dessous à votre PLIST
Étape 2 dans l'ajout de RootViewcontroller ci-dessous
Lors de la mise à jour de l'une des propriétés
statusBarHidden
ou,vcStatusBarStyle
il appellerasetNeedsStatusBarAppearanceUpdate()
et mettra à jour la barre d'état avec les nouvelles valeurs pourprefersStatusBarHidden
oupreferredStatusBarStyle
. Dans ma situation, j'ai dû mettre à jour ces propriétés pour le conteneur viewcontroller, qui était le parent du childviewcontroller visible. Je l'ai fait en utilisant une méthode de délégué simple.Bien sûr, lors de l'instanciation du childViewController (Visible VC), n'oubliez pas de définir MainViewcontroller (Container VC) comme son délégué. Je fais parfois. :)
Ensuite, dans le childViewController, je viens d'appeler la méthode de délégué lorsque cela est nécessaire pour mettre à jour la barre d'état.
Comme mentionné ci-dessus, Graig Grummitt donne plus de détails sur cette solution et travaille également avec UINavigationControllers. Lien ici: Le cas mystérieux de la barre d'état
la source
Cliquez sur le groupe Fichiers de support (en haut à gauche - nom de votre projet). Accédez à Info. Cliquez sur + quelque part entre les listes, comme ci-dessous le nom du bundle. Et ajoutez "Afficher l'apparence de la barre d'état basée sur le contrôleur" et réglez-le sur NON. Ensuite, ouvrez AppDelegate.swift et modifiez-le comme ceci:
C'est tout.
la source
Pour Xcode 10, vous pouvez créer une classe et la mettre avant votre classe viewController, vous pouvez appeler cette classe dans tout le contrôleur de vue est nécessaire une barre d'état du contenu léger ...
Modifiez maintenant votre classe viewController dans:
Et c'est tout...
la source
Fonctionne pour la navigation basée sur un contrôleur de vue particulier dans swift4
la source
AVERTISSEMENT
Le Setter pour 'statusBarStyle' était obsolète dans iOS 9.0: Utilisation - [UIViewController favoriteStatusBarStyle]
ma solution était donc la suivante: créer une extension à partir du contrôleur de navigation:
et si vous avez un viewController qui aura un autre style que le style de l'application, vous pouvez faire ceci
disons que le style d'état de votre application est
.default
et que vous voulez que cet écran soit.lightContent
tel que barStyle prendra.lightContent
comme valeur par défaut, cela changera le style de la barre d'état en lightContent, puis assurez-vous que lorsque vousviewWillDisappear
changez à nouveau le style barStyle en style de barre d'état de l'application ce qui dans notre cas est.default
.cela fonctionne pour moi
la source
Couleur personnalisée pour la barre d'état (iOS11 +, Swift4 +)
Si vous recherchez une solution pour changer la barre d'état en votre couleur personnalisée, c'est la solution de travail.
la source