111 votes

UIStatusBarStyle PreferredStatusBarStyle ne fonctionne pas sous iOS 7

Dans mon application iPhone construite avec Xcode 5 pour iOS 7, j'ai configuré UIViewControllerBasedStatusBarAppearance=YES en info.plist et dans mon ViewController J'ai ce code :

-(UIStatusBarStyle) preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

Mais la barre d'état est toujours noire sur le fond noir.

Je sais qu'il est possible de changer cela pour l'ensemble de l'application en paramétrant UIViewControllerBasedStatusBarAppearance=NO en info.plist mais j'ai besoin de le modifier sur un site Web de l viewController par viewController au moment de l'exécution.

0 votes

Bonjour, j'ai le même problème que vous avez mentionné dans la question. Avez-vous obtenu la solution ? Veuillez me la fournir.

0 votes

281voto

mxcl Points 5921

J'ai découvert que si votre ViewController se trouve à l'intérieur d'un navigationController, alors la fonction navigationBar.barStyle détermine le statusBarStyle.

Définir les paramètres de votre barre de navigation barStyle a UIBarStyleBlackTranslucent donnera un texte de barre d'état blanc (c'est-à-dire. UIStatusBarStyleLightContent ), et UIBarStyleDefault donnera un texte noir dans la barre d'état (ie. UIStatusBarStyleDefault ).

Note que cela s'applique même si vous modifiez totalement la couleur de la barre de navigation via sa section barTintColor .

0 votes

Cela me paraît logique... génial

14 votes

Je crois que c'est parce que le UINavigationController 's preferredStatusBarStyle ne fait pas appel au ViewController qu'il héberge, mais renvoie simplement les données en fonction de son NavigationBarStyle.

0 votes

Dans ce cas, la vue n'est pas à l'intérieur d'un contrôleur de navigation.

88voto

Andrew Smith Points 689

OK, voici l'astuce. Vous devez ajouter la clé "Afficher la barre d'état basée sur le contrôleur" et définir la valeur sur Non.

Cela va à l'encontre de ce qui semble être la signification de cette clé, mais même si vous définissez la valeur à No vous pouvez toujours modifier l'apparence de la barre d'état et décider de l'afficher ou non dans n'importe quel contrôleur de vue. Ainsi, elle agit comme "Oui", mais elle est réglée sur "Non" !

Maintenant je peux avoir la barre d'état blanche ou foncée.

7 votes

Pour moi, c'était faux. La clé devait être définie sur "Oui", comme on pouvait s'y attendre. Je suis sur Xcode 5.1 iOS 7.1, donc peut-être que cela a changé.

0 votes

J'utilise Xcode 5.1 et iOS 7.1 également et NO a fonctionné pour moi... ÉTRANGE.

0 votes

Où dois-je ajouter cette clé ?

21voto

Matt Quiros Points 2236

Pour fournir plus de détails dans la réponse acceptée, mettez la ligne suivante dans le délégué de votre application didFinishLaunchingWithOptions: méthode :

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

Ensuite, dans votre Info.plist, ajoutez View controller-based status bar appearance et le régler sur NO .

Je crois que c'est ainsi qu'il faut procéder, et NON à partir du contrôleur de navigation, si vous voulez que la couleur de la barre d'état soit la même pour toute l'application. Il se peut que vous ayez des écrans qui ne sont pas nécessairement intégrés dans une application de type UINavigationController ou un autre UINavigationController sous-classe quelque part ailleurs, et d'autres choses.

EDIT : Vous pouvez aussi le faire sans taper aucun code : https://stackoverflow.com/a/18732865/855680

1 votes

Notez que cette méthode n'est plus utilisée depuis IOS 9.0.

10voto

Bhavik Kama Points 2580

Dans viewDidLoad, écrivez simplement ceci

[self setNeedsStatusBarAppearanceUpdate];

faites-le et ça marchera

pouvez-vous essayer ceci

Set UIViewControllerBasedStatusBarAppearance to NO.
Call [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Une autre chose que j'ai vu dans votre question que vous avez écrit la méthode comme ceci

 -(void)UIStatusBarStyle PreferredStatusBarStyle ()
        {
            return UIStatusBarStyle.LightContent;
        }

mais ça devrait être comme ça

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
}

0 votes

Ainsi, la méthode preferredStatusBarStyle est appelée, mais la barre d'état reste noire.

0 votes

Veuillez voir ma réponse mise à jour faites-moi savoir rapidement si cela fonctionne ou non

0 votes

Ma question initiale indique explicitement que je dois contrôler la barre d'état vue par vue.

1voto

aalesano Points 91

Si vous souhaitez masquer la barre d'état pendant l'écran de démarrage, mais que vous souhaitez modifier le style en contenu léger (StatusBarInitiallyHidden sur la liste doit être NO pour masquer la barre d'état pendant l'écran de démarrage), vous pouvez ajouter ceci à la méthode didFinishLaunchingWithOptions de l'appDelegate pour passer en contenu léger.

[[UIApplication sharedApplication]setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X