Impossible de masquer la barre d'état dans iOS7

267

Je viens de mettre à jour mon iPhone 5 iOS 7 en version bêta quatre. Maintenant, lorsque j'exécute mon application à partir de Xcode 5 sur cet iPhone, la barre d'état ne se cache pas, même si cela devrait.

Ca ne fonctionne pas:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

Ca ne fonctionne pas:

[UIApplication sharedApplication].statusBarHidden = YES;

Impossible de se connecter aux forums des développeurs Apple

Melih Büyükbayram
la source
15
Faux, ma réponse concernait Xcode et cela a été montré au grand public. C'est trop général pour dire 'si vous répondez à cela, c'est une violation de NDA' .. laissez les développeurs décider par eux-mêmes ;-)
Jake
le doublon possible de la barre d'état ne disparaîtra pas
ekhumoro
comment masquer la barre d'état par programme ViewController particulier?
bhavik

Réponses:

558

dans le fichier plist de vos applications, ajoutez une ligne, appelez-la "Afficher l'apparence de la barre d'état basée sur le contrôleur" et définissez-la sur NO

Notez que cela ne fonctionne tout simplement pas, si vous utilisez UIImagePickerController dans l'application.

sur http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , la solution de mgiroux

Un exemple ajoutant View Base Controller à vos paramètres Info dans Xcode

satgi
la source
3
Incroyable! Je perds des heures sur celui-ci! Je vous remercie!
Idan
12
Pour référence, la valeur brute stockée dans le fichier Info.plist réel est appelée UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield
55
Le seul problème avec cette approche est que si vous utilisez le UIImagePickerController pour sélectionner des images, il forcera la barre d'état à réapparaître. plist pour être vrai.
Jason Fuerstenberg
5
Je ne sais vraiment pas pourquoi Apple a changé cela! Merci :)
Mohamed Amine
18
Vous devez également définir Status bar is initially hiddensur OUI .
Zorayr
277

Ajoutez une méthode dans votre contrôleur de vue.

- (BOOL)prefersStatusBarHidden {
    return YES;
}
invoodoo
la source
35
Pour tous ceux qui recherchent, c'est la façon de le faire si vous souhaitez supprimer dynamiquement la barre d'état dans certaines vues. Cette méthode fonctionne indépendamment de ce que vous définissez "Afficher l'apparence de la barre d'état basée sur le contrôleur" dans votre liste!
M. T
2
+1 b / c Je recherche la possibilité d'afficher / masquer dynamiquement la barre d'état. La méthode de réglage de la liste P (voir l'article de @Satgi ci-dessus) est cependant le meilleur moyen d'afficher / masquer la barre d'état à l'échelle mondiale.
JonnyB
Si vous avez une galerie de photos quelque part, vous souhaitez généralement masquer les commandes uniquement là-bas, et vous pouvez également l'activer / la désactiver. Cela ne fonctionne pas pour moi, la fonction n'est même pas appelée. J'ai au même endroit un PreferredStatusBarStyle et je
m'appelle
4
@ Mr.T Dans iOS 8, cela ne semble plus être le cas. Si vous avez défini l'apparence de la barre d'état basée sur le contrôleur de vue sur NON et que vous retournez vrai prefersStatusBarHiddendans un contrôleur de vue, cela ne fonctionnerait pas. La barre d'état apparaît toujours.
Isuru
1
@Isuru pourquoi avez-vous mis à NON? Si vous définissez sur OUI, il demanderait à chaque contrôleur de vue dans d'autres cas, bien sûr, il ne le ferait pas.
invoodoo
84

Dans le Plist, ajoutez les propriétés suivantes.

-> Status bar is initially hidden= OUI

-> View controller-based status bar appearance= NON

Ajoutez les deux - maintenant la barre d'état disparaîtra.

user1179912
la source
Oui, cela a aussi fonctionné pour moi. Sans définir l'option "La barre d'état est initialement masquée" sur OUI, cela ne fonctionne pas comme prévu. THX.
AndrewShmig
53

Pour masquer la barre d'état sur une vue unique, vous devez utiliser:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

Au début, cela n'a pas fonctionné pour moi, puis une scie dans la documentation de cette méthode qui dit: // La définition de statusBarHidden ne fait rien si votre application utilise le système de barre d'état par défaut basé sur UIViewController.

Cela doit être fait sur le fichier plist, en ajoutant le View controller-based status bar appearancejeu de clés à NO. Et puis ça a marché.

Debora Fortini
la source
16

Afin d'utiliser la méthode UIApplication héritée pour masquer / afficher la barre d'état, votre application doit définir une valeur de plist pour iOS 7:

View-Controller Based Status Bar Appearance = NO

Cette valeur est définie sur OUI par défaut. Si vous le remplacez par NO, vous pouvez utiliser les méthodes héritées. Si vous la laissez définie sur OUI, vous pouvez toujours masquer la barre d'état, mais il appartient à chaque sous-classe de contrôleur de vue de votre application de remplacer: prefersStatusBarHiddenpour retourner OUI.

Chaque fois que votre application a besoin que l'apparence ou la visibilité de la barre d'état change, et que l'apparence de la barre d'état basée sur le contrôleur est définie sur OUI, votre contrôleur de vue le plus à l'extérieur doit appeler:

setNeedsStatusBarAppearanceUpdateAnimation

jaredsinclair
la source
J'ai dû appliquer dans les propriétés cibles iOS personnalisées, car dans la liste générale, cela n'a pas fonctionné
xarly
16

Pour masquer la barre d'état dans iOS7, vous avez besoin de 2 lignes de code

  1. inapplication: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsécrire

    [application setStatusBarHidden:YES];
  2. dans info.plist ajoutez ceci

    View-Controller Based Status Bar Appearance = NO
Shaik Riyaz
la source
2
Juste pour nettoyer cela, si vous mettez cela à l'intérieur de didFinishLaunching, vous pouvez simplement écrire [application setStatusBarHidden:YES];ouapplication.statusBarHidden = YES;
joel.d
il peut y avoir une faute de frappe dans la réponse ci-dessus. "Apparence de la barre d'état basée sur le contrôleur = NON" n'a pas fonctionné pour moi, mais "Apparence de la barre d'état basée sur le contrôleur = NON" a fonctionné.
tmr
11

Il existe de nombreuses combinaisons suggérées pour ce problème, mais le problème est que iOS 6 et 7 utilisent différentes méthodes pour masquer la barre d'état. Je n'ai jamais réussi à définir les paramètres de plist pour activer le comportement de style iOS6 sur iOS 7, mais si vous créez votre application pour prendre en charge iOS 6+, vous devez utiliser 3 méthodes à la fois pour vous assurer qu'un contrôleur de vue particulier cache le statut bar:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

Cela devrait fonctionner quels que soient vos paramètres de plist.

SaltyNuts
la source
7

J'ai dû effectuer les deux modifications ci-dessous pour masquer la barre d'état:

Ajoutez ce code au contrôleur de vue où vous souhaitez masquer la barre d'état:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Ajoutez ceci à votre fichier .plist (allez dans 'info' dans les paramètres de votre application)

View controller-based status bar appearance --- NO

Ensuite, vous pouvez appeler cette ligne pour masquer la barre d'état:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Peter Y
la source
6

Ajoutez simplement ces 2 lignes dans le fichier info.plist. Il apportera le correctif pour iOS7 et les versions antérieures à la fois.

  • La barre d'état est initialement masquée = OUI
  • Afficher l'apparence de la barre d'état basée sur le contrôleur = NON

Accédez au projet et sélectionnez Cibles -> Général et la case à cocher "Style de la barre d'état ... Masquer lors du lancement de l'application" sera cochée. Cela fonctionnera.

Sid
la source
6

Essayez cette méthode simple:

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

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Rajesh Loganathan
la source
4

La seule chose qui a fonctionné pour moi est d'ajouter ce qui suit dans votre liste

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Bartburkhardt
la source
4

La méthode la plus simple que j'ai trouvé pour cacher la barre d'état tout au long de l'application entière est en créant une categorysur UIViewControlleret en remplaçant prefersStatusBarHidden. De cette façon, vous n'avez pas à écrire cette méthode dans chaque contrôleur de vue unique.

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end
Mike
la source
la meilleure vraie solution iOS7, non fakey, génial
Fattie
3
  1. Dans la liste, ajoutez ----

    Afficher l'apparence de la barre d'état basée sur le contrôleur --- NON

  2. Dans chaque vue, le contrôleur écrit

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

Pour le problème de la barre d'état dans iOS 7, mais la cible devrait être 5.1 et supérieure pour l'application

Maulik
la source
3

La plupart des réponses sur ce sujet fonctionnent, mais je crois comprendre que si vous essayez de faire quelque chose de dynamique, vous devrez éventuellement appeler:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
feutrine
la source
3

Étapes pour masquer la barre d'état dans iOS 7:

1.Accédez au fichier info.plist de votre application.

2.Et définir, afficher l'apparence de la barre d'état basée sur le contrôleur: booléen NON

J'espère que j'ai résolu le problème de la barre d'état .....

chandrika
la source
3

Pour iOS 7 dans une seule vue, utilisez la méthode viewWillappear:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

Pour afficher la barre d'état, utilisez:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
oscar castellon
la source
3
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
Thunderbird
la source
2

Dans le fichier Info Plist Ajouter une ligne pour la propriété suivante

Nom de la propriété: afficher l'apparence de la barre d'état basée sur le contrôleur

Valeur: NON

user842553
la source
1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
Bhoopi
la source
1

J'ai essayé toutes ces options affichées ici sur mon projet et elles ne fonctionneraient pas. Je pensais que cela pouvait être lié au fait que j'avais mis à jour mon Xcodepuis l'application sur iOS 7 et que certains paramètres avaient été foirés quelque part. J'ai décidé de construire un projet complètement nouveau pour lui et après avoir simplement réglé: " Status bar is initially hidden = YES" et " View controller-based status bar appearance = NO" comme indiqué par beaucoup d'autres, cela a fonctionné correctement (c'est-à-dire sans barre d'état).

Donc, mon conseil si vous travaillez sur un projet qui a été mis à jour vers iOS 7 à partir d'une ancienne version et que vous avez essayé toutes les autres options est de créer un nouveau projet.

user1529408
la source
J'ai utilisé cette même technique pour confirmer initialement que je pouvais masquer la barre d'état globalement, pour chaque écran, mais comme mon application est assez "centrée sur le temps", je voulais l'affichage de l'heure pour la plupart des écrans. Ce n'est qu'un écran que je voulais exclure pour diverses raisons. J'ai fini par utiliser l'opposé de vos paramètres: initialement caché = apparence de la barre d'état basée sur NO et VC = OUI. Ensuite, j'ai dû mettre la méthode (BOOL) prefersStatusBarHidden (renvoyant YES) dans le VC où je le voulais caché. Fonctionne bien. Je dois ajouter que mon application est uniquement iOS7 pour d'autres raisons.
bobsmells
1

Pour 2019 ...

Pour créer une application sans barres d'état,

Cliquez sur info.plist, faites un clic droit sur "Ajouter une ligne".

Ajoutez ces deux, avec ces paramètres:

entrez la description de l'image ici

C'est tout ce qu'on peut en dire.

Fattie
la source
0

Pour Swift 2.0+ IOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}
Irshad Qureshi
la source
0

Pour masquer la barre d'état pour une vue spécifique

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Pour définir la barre d'état Masqué pour l'application:

  • ensemble View controller-based status bar appearanceà NOen .plist et en application: didFinishLaunchingWithOptions:série: [application setStatusBarHidden:YES];

    Remarque: setStatusBarHidden: obsolète

OU

  • dans les paramètres du projet -> onglet Général -> informations de déploiement

    Case à Hide Status barcocher.

Lal Krishna
la source
-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
Evan Ische
la source
La question mentionne explicitement que cette approche ne fonctionne pas. Veuillez lire attentivement la question avant de répondre.
Borys Verebskyi
Tant que l'apparence de la barre d'état basée sur le contrôleur d'affichage est définie sur NON, c'est l'approche la plus propre.
Evan Ische
-7

Je ne sais pas pourquoi vous "ne pouvez pas vous connecter aux forums des développeurs Apple", mais (sans violer la NDA), vous pouvez également masquer votre barre d'état via Xcode. Il s'agit d'un paramètre général sur votre cible d'application.entrez la description de l'image ici

Jake
la source
non, fonctionne comme un charme. les forums sont en place depuis un certain temps maintenant.
Jake