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?

user2397282
la source

Réponses:

220

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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}
Quentin
la source
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.

Idan
la source
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.

Sven
la source
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

user_Dennis_Mostajo
la source
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];
    }
seul
la source
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.

Ikuramedia
la source
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 !

Mike Gledhill
la source
!! 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

sohail.hussain.dyn
la source
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];
     }
xevser
la source
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.

Escroc
la source
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.

Dev01
la source
2

Solution rapide

ajoutez simplement ceci à vos contrôleurs de vue:

override func prefersStatusBarHidden() -> Bool {
    return true
}
Dan Beaulieu
la source
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];
}
RRN
la source
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.

essai
la source