La barre d'état ne disparaîtra pas


112

Je crée une application et je veux que la barre d'état soit masquée. Lorsque je teste l'application, la barre d'état est masquée tandis que l'écran de démarrage est affiché, mais une fois que l'application est complètement chargée, la barre d'état réapparaît.

J'utilise Xcode 5 et iOS 7 et j'ai essayé de désactiver la barre d'état par programme

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

dans le fichier info.plist et à l'aide de l'inspecteur d'attributs sur le fichier .xib. Rien ne semble fonctionner.

Des idées?

Réponses:


220

Essayez d'ajouter la méthode suivante au contrôleur de vue racine de votre application:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
Comment faire cela globalement?
jjxtra

16
De plus, comme indiqué dans la documentation Apple, vous devez appeler la [self setNeedsStatusBarAppearanceUpdate];méthode après avoir appelé cette méthode avec autre chose que la valeur par défaut (la valeur par défaut est NON).
manderson le

3
@PsychoDad Vérifiez ma réponse pour une solution plus globale.
Idan

2
Parfait, merci. Je ne peux tout simplement pas comprendre pourquoi iOS 7 fait cela et ne respecte pas les XIB qui ne contiennent AUCUN paramètre de barre d'état!
justinhartman

1
L'ajout de ceci sur un ViewController ajouté à la pile est tout ce dont j'avais besoin pour masquer la barre d'état dans ce viewcontroller; la barre d'état revient lorsque ce viewcontroller est supprimé.
MacD

126

Vous devez ajouter cette valeur à plist: " Afficher l'apparence de la barre d'état basée sur le contrôleur " et la définir sur " NON ".

Cela vous permettra de définir la barre d'état en mode caché . Cela le définit à un global contrairement aux autres réponses fournies.

MISE À JOUR: Si vous souhaitez que la barre d'état soit masquée sur l'écran de démarrage, n'oubliez pas de cocher « Masquer lors du lancement de l'application » sur les options de la barre d'état cible. En outre, vous pouvez ajouter "La barre d'état est initialement masquée " à " OUI " sur le plist si vous ne voulez pas le faire avec du code dans l'application.


2
Il m'a fallu beaucoup de temps pour comprendre cela. C'est un problème que je pense que tout le monde aurait et Apple ne l'a pas assez mentionné. heureux d'aider ...
Idan

7
fonctionne bien, n'oubliez pas de définir la valeur .plist pour "La barre d'état est initialement masquée" sur OUI.
andreas-supersmart

1
Wow, c'était la seule chose qui fonctionnait avec Kobold2d 2.1.0 et iOS 7, merci beaucoup!
Binarian

5
Apple ne sont pas vraiment des champions de la rétrocompatibilité. Dansons tous sur leur flûte et mettons à jour chacune de nos applications. Désolé, évacuant la frustration. Causé par Apple.
Henrik Erlandsson

1
enfin ça marche pour moi. Parce que - (BOOL) préfère que la méthode statusbarhidden ne fonctionne pas dans la vue du modèle.
utkal patel

73

Le code que vous avez publié fonctionne pour iOS 6.1 et les versions antérieures. Pour iOS 7, Apple a mis à disposition de nouvelles méthodes pour contrôler directement la barre d'état de chaque vue. La désactivation de cette option dans votre Info.plist vous permettra de masquer la barre d'état, au moins pour l'aperçu développeur actuel (4).

Ajoutez ceci et définissez sur NON

Pour référence, veuillez consulter le guide de transition iOS 7 disponible sur le portail des développeurs d'Apple.


3
À mon avis, cette réponse est meilleure car dans mon application, je souhaite uniquement masquer la barre d'état en mode paysage, merci!
Son Nguyen

merci, cela m'aide car je veux le cacher pour toute mon application
kevinl

2
À mon avis, cette réponse devrait être la meilleure réponse -> Elle est expliquée ici developer.apple.com/library/prerelease/ios/documentation
...

5
J'ai fait cela, mais il semble que cela vient de cacher la barre d'état, cependant, mon application est toujours `` poussée vers le bas '' par la quantité d'espace que la barre d'état prendrait, et je peux toujours voir l'indicateur de batterie!
vedran le

36

bien j'essaye de cacher la barre d'état dans toute mon application et dans le "app" -info.plist et j'ajoute deux lignes dans le dictionnaire "Liste des propriétés d'information" J'ajoute "Afficher l'apparence de la barre d'état basée sur le contrôleur" définir NON et dans " La barre d'état est initialement masquée "set OUI et pour moi fonctionne n_n '

info plist


2
Cela force votre application dans un mode de compatibilité conçu uniquement pour que les anciennes applications s'exécutent comme prévu sur iOS 7 lorsque les développeurs n'ont pas le temps de corriger l'application pour la nouvelle façon de faire les choses. Au lieu de cela, vous devez implémenter les méthodes prefer * dans vos contrôleurs de vue.
lhunath

17

Cependant, si vous utilisez UIImagePicker, la barre d'état s'affiche à nouveau.

Dans ce cas, vous devez masquer la barre d'état comme ci-dessous,

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
J'ai le même problème. La barre d'état est masquée jusqu'à ce que j'utilise UIImagePicker. J'ai essayé votre solution et cela ne fonctionne pas pour moi. Ai-je besoin d'ajouter autre chose que le code dans votre message?
Dev01

@WootWoot J'ai également ajouté - (BOOL) prefersStatusBarHidden {return YES; } pour afficher les contrôleurs. Essayez-le.
seuls

ne semble pas fonctionner pour moi .. devriez-vous vraiment appeler setNeedsStatusBarAppearanceUpdate?
RyanM

J'ai besoin de masquer la barre d'état en cliquant sur un bouton. J'ai essayé le code ci-dessous mais cela n'a pas fonctionné. Quelqu'un peut-il m'aider s'il vous plaît. [[UIApplication sharedApplication] setStatusBarHidden: OUI];
janitheshan

8

Après de longues recherches, j'ai finalement trouvé une solution très simple qui s'occupe également du UIImagePickerControllerproblème.

Comme mentionné dans les autres réponses, définissez votre barre d'état masquée dans votre AppDelegate didFinishLaunching et définissez «Afficher l'apparence de la barre d'état basée sur le contrôleur» sur NON.

Ensuite, dans votre AppDelegate:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila - votre barre d'état restera cachée même lorsque UIImagePickerController est au premier plan.

C'est mieux que de le `` masquer '' chaque fois que vous présentez un UIImagePickerController car il reste caché dans l'application.


2
Bien que quelque chose semble toujours cassé dans iOS7 sur iPad au moins - le UIImagePickerController affiche toujours une barre d'état la deuxième fois qu'il est affiché ... Hurrrr ... :-( Actuellement, j'utilise appDelegate en le cachant à nouveau dans chaque vue . Donc, même s'il a l'air sale pendant un court moment, il est réparé rapidement.
ikuramedia

1
C'est la seule méthode qui a fonctionné pour moi sur iOS8 ... en quelque sorte préfèreStatusBarHidden ne soit pas appelé sur mon contrôleur de vue.
mojuba

7

Pour masquer la barre d'état sur un UIViewController particulier, ajoutez simplement ceci:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

J'espère que cela t'aides !


!! C'est la solution qui a fonctionné pour moi dans iOS 9.2, la modification du plist n'a eu aucun effet.
mico

5

Vous pouvez vous cacher du résumé du projet. il y a une case à cocher masquer lors du lancement.

Voir l'instantané

entrez la description de l'image ici


4

J'ai trouvé cette solution pour moi. Il fonctionne comme un charme. Écrivez ce code sur votre viewcontroller sur lequel vous vouliez utiliser UIImagePickerController.

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
     }

3

En plus de la réponse des seuls ci-dessus, assurez-vous d'implémenter la méthode imagePickerControllerDidCancel et ajoutez-y le même code.


2

J'avais également des problèmes avec UIImagePicker. Semblable à la réponse Alones, ma solution était la suivante. J'ai ajouté cette ligne ou ce code:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

à cette fonction:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Je n'ai pas testé cela avec iOS 6 ou une version antérieure, mais cela fonctionne très bien sous iOS 7.


2

Solution rapide

ajoutez simplement ceci à vos contrôleurs de vue:

override func prefersStatusBarHidden() -> Bool {
    return true
}

0

J'utilise Xcode 6, cette solution fonctionne sur iOS 7 et 8 pour moi:

Tout d'abord, définissez «Afficher l'apparence de la barre d'état basée sur le contrôleur» sur NON dans le fichier plist.

Deuxièmement, dans AppDelegate, ajoutez ceci:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

0

Mon problème était que j'utilisais le confinement du contrôleur de vue. Seul le contrôleur de vue le plus haut, qui est intégré dans un contrôleur de navigation par exemple, peut masquer ou afficher la barre d'état.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.