La couleur de fond de mon application est le noir. Parce que la vue entière est en dessous de la barre d'état sur iOS 7, il sera difficile de distinguer le contenu de la barre d'état. Alors, comment changer la couleur du contenu de la barre d’état en blanc?
J'ai essayé preferredStatusBarStyle
et plusieurs autres méthodes, mais j'ai échoué.
Insérer
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
à -application:didFinishLaunchingWithOptions:
de la AppDelegate.m.
Remarque : UIStatusBarStyleDefault
est la valeur par défaut pour le style de la barre d'état. Elle affiche le contenu noir à la place. Les deux UIStatusBarStyleBlackTranslucent
et UIStatusBarStyleBlackOpaque
sont obsolètes dans iOS 7.0.
Comme @ ZakariaDarwish mentionné, la méthode -setStatusBarStyle
est obsolète dans iOS 9. (Remarque: la question initiale avait été posée pour iOS 7 il y a longtemps et je ne la prend pas en charge maintenant. La nouvelle solution ci-dessous fonctionne pour moi sous iOS 9 et est donc mise à jour ici.)
Donc, le seul moyen qui reste ( au moins pour le moment) consiste à implémenter -preferredStatusBarStyle
dans votre contrôleur de vue (rappelez-vous de redéfinir "Apparence de la barre d'état basée sur le contrôleur de vue" sur [~ # ~] yes [~ # ~] ).
Vous pouvez appeler la méthode d'instance d'UIViewController -setNeedsStatusBarAppearanceUpdate
une fois que la valeur a changé dans -preferredStatusBarStyle
ou -prefersStatusBarHidden
.
Il y a aussi deux méthodes -childViewControllerForStatusBarStyle
& -childViewControllerForStatusBarHidden
pour renvoyer le style préféré du contrôleur de vue enfant comme vous le souhaitez.
par exemple , si vous avez utilisé les méthodes ci-dessous
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
pour changer de style de barre d'état auparavant, vous pouvez utiliser l'exemple de code ci-dessous
- (void)shouldChangeStatusBarStyleToLightContent:(BOOL)toLightContent
animated:(BOOL)animated
{
_shouldChangeStatusBarStyleToLightContent = toLightContent;
if (animated) {
[UIView animateWithDuration:.3f animations:^{ [self setNeedsStatusBarAppearanceUpdate]; }];
} else {
[self setNeedsStatusBarAppearanceUpdate];
}
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return (_shouldChangeStatusBarStyleToLightContent ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault);
}
pour cette solution mise à jour maintenant.
Dans votre fichier * -Info.plist:
Vous pouvez également définir le style de barre d'état sur "Noir opaque" ou "Noir translucide" dans l'onglet Général de la cible (dans Xcode 5.0.1), mais il s'agit de valeurs obsolètes.
J'utilise ceci dans le contrôleur principal:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Voici une solution simple et rapide pour définir la couleur de la barre d'état en blanc
1) Copiez d'abord cette ligne View controller-based status bar appearance
dans votre fichier .plist et définissez Boolean NO
;
2) Dans votre fichier AppDelegate.m sous didFinishLaunchingWithOptions collez cet élément.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
OU ajouter dans .plist
iOS 9 (solution de secours déconseillée)
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
#ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif
[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
Si la couleur du contenu de la barre d'état de votre application est différente pour chaque contrôleur de vue, la méthode recommandée est la mise en œuvre.
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Si vous devez modifier la couleur du contenu de la barre de manière globale dans l'application, ajoutez les lignes de code suivantes dans votre méthode didFinishLaunchingWithOptions dans AppDelegate.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
Attendez que le paramètre statusBarStyle ne produise rien si votre application utilise le système de barre d'état par défaut basé sur UIViewController. Pour ça
Définissez "Afficher l'apparence de la barre d'état basée sur le contrôleur" sur NO dans votre fichier info.list
Juste une note, puisque c'était là. Si vous utilisez un UINavigationController, vous pouvez le jeter dans la méthode des contrôleurs de vue viewDidLoad
:
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
Pour le faire par programme dans Swift 3 essayez ceci n'importe où dans votre contrôleur de vue.
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Je règle également la touche "Afficher l'apparence de la barre d'état basée sur le contrôleur" sur OUI.