web-dev-qa-db-fra.com

Comment définir la couleur du contenu de la barre d'état sur blanc sur iOS 7

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é.

65
Kjuly
  1. Définissez "Afficher l’apparence de la barre d’état basée sur le contrôleur" sur [~ # ~] non [~ # ~] dans votre fichier info.list ;
  2. 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.


UPDATE pour iOS 9:

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.

190
Kjuly

Dans votre fichier * -Info.plist:

  1. Définissez 'Afficher l'apparence de la barre d'état basée sur le contrôleur' ​​sur NO
  2. Définissez 'Style de la barre d'état' sur UIStatusBarStyleLightContent

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.

68
Satachito

J'utilise ceci dans le contrôleur principal:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
26
Denis Kozhukhov

Placez ces deux clés dans info.plist

enter image description here

14
NaXir

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

enter image description here

9
Hardik Thakkar

iOS 9 (solution de secours déconseillée)

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
6
Anthony Marchenko
    #ifdef __IPHONE_7_0
    # define STATUS_STYLE UIStatusBarStyleLightContent
    #else
    # define STATUS_STYLE UIStatusBarStyleBlackTranslucent
    #endif

    [[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
5
Arash Zeinoddini

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

5
Rajan Twanabashu

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;
4
Shawn

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.

2
smileBot