Masquer la barre d'état sur iPhone sur une seule vue?

Je veux afficher la barre d'état dans mon application dans toutes les vues sauf une. J'ai essayé de modifier la "barre d'état est d'abord caché" dans le plist, j'ai essayé:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Cela cache la barre mais laisse une boîte bleue laide où se trouvait la barre d'état (ce qui ne fait pas partie de ma vue, il n'y a rien de bleu là-bas).

J'ai également essayé de modifier la mise en page veut plein écran et les paramètres de la barre d'état dans le bit 'Interface builder' de Xcode 4.2.

Des suggestions?

Modifier - TYPE DE SOLUTION:

Je l'ai fait en incluant:

    -(void)viewWillDisappear:(BOOL)animated{


    [[UIApplication sharedApplication] setStatusBarHidden:YES];

}


-(void)viewDidAppear:(BOOL)animated{


    [[UIApplication sharedApplication] setStatusBarHidden:NO];

}

Sur chaque page sur laquelle je veux que la barre d'État soit activée.

Il semble toujours saccadé et inutile car la barre d'onglets apparaît et réapparaît chaque fois que vous changez de vue. Mais j'en ai assez, j'ai travaillé sur ce problème stupide pendant environ 5 heures Maintenant, donc cela devra faire.

DEUXIÈME ÉDITION -

Correction de la choppyness en incluant setStatusBarHidden = NO dans viewWillAppears. Dieu sait comment tout fonctionne mais il n'.

32
demandé sur Adam Waite 2011-11-30 17:36:57

9 réponses

Essayez celui-ci, il fonctionnera parfaitement..

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Et dans XIB, définissez l'option none pour la barre d'état.

Pour iOS 7.

Aller à info.plist et ajouter deux attributs s'il n'est pas présent. définissez" la barre d'État est initialement masquée "sur" Oui "et définissez" UIViewControllerBasedStatusBarAppearance " sur "non". Cela masquera la barre d'état de votre application.

42
répondu Kartik 2014-09-06 12:24:59
#pragma mark - Hide statusbar

-(void)hideStatusBar {
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
    // iOS 7.0 or later
    [self setNeedsStatusBarAppearanceUpdate];
#else
    // less than 7
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
#endif
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}
16
répondu neoneye 2013-09-25 07:48:29

S'il y a quelqu'un à la recherche d'une solution où la solution ci-dessus ne fonctionne pas (et il y a toujours un espace bleu 20px ennuyeux en haut), essayez de mettre cela dans viewwillapparaître sur le fichier d'implémentation du contrôleur de vue que vous souhaitez que la barre d'État soit masquée.

self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, 0.0, -20.0);

Cela m'a littéralement pris 12 heures environ pour réparer, et c'était la solution, alors maintenant je fais passer le mot au cas où quelqu'un d'autre aurait ce problème ennuyeux.

8
répondu Adam Waite 2012-01-04 03:05:54

La solution de Kartik a fonctionné pour moi.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

J'ai ajouté ceci à la méthode d'instance viewWillAppear:.

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    self.webView.scalesPageToFit = YES;
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.co.uk"]]];
}

Et j'ai passé des siècles là-dessus aussi. En utilisant Xcode 4.2, iOS5 sim.

Mais quand je l'ai implémenté pour la première fois, l ' "espace" ennuyeux au sommet était là. J'ai sélectionné le contrôleur de vue dans le storyboard et défini les propriétés comme suit: Taille: Plein Écran La Barre D'État: Aucun tout le reste déduit.

J'ai vérifié veut plein écran.

Voilà, tout a bien fonctionné.

7
répondu WillShakes 2013-07-31 20:40:18

Je sais que c'est une vieille question, mais aucune de ces réponses qui fonctionne pour moi, donc, c'est comment ça marche pour moi, pour masquer la barre d'état dans un seul viewController

Tout d'abord dans votre parentViewController, vous devez définir:

- (UIViewController *)childViewControllerForStatusBarHidden {
    if ( hideStatusBarViewController ) {
        return hideStatusBarViewController;
    }
    return nil
}

Il ne renvoie le contrôleur de vue enfant que lorsqu'il est créé, sinon nil est la valeur par défaut. Lorsque vous ajoutez votre hideStatusBarViewController, vous devez appeler

[self setNeedsStatusBarAppearanceUpdate];

Sur parentViewController, cette fonction force à lire childViewControllerForStatusBarHidden. Enfin dans hideStatusBarViewController vous devez définir

- (BOOL)prefersStatusBarHidden {
    return YES;
}

C'est la seule solution qui fonctionne pour moi. J'espère que ça aidera quelqu'un.

2
répondu Patricio Bravo 2015-02-13 19:13:53

Je vous suggère une approche différente: insérez cette vue dans la fenêtre de l'application:

YourUIAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.window insertSubview:self.yourView atIndex:([[appDelegate.window subviews]count])];

De cette façon, il apparaîtra sur la barre d'état

J'espère que cela vous aidera

1
répondu Fran Sevillano 2011-11-30 13:48:48

C'est la solution si vous souhaitez masquer la barre d'état sur un vue unique

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    [self.view sizeToFit];
}
1
répondu Sihad Begovic 2013-06-11 13:59:53

Voici un extrait de code qui pourrait aider. Lorsque le chargement de la vue affiche la barre d'état, lorsque vous quittez la vue, masquez-la à nouveau.

-(void)viewWillAppear:(BOOL)animated {
    if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
        [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
    else 
        [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
}


-(void)viewWillDisappear:(BOOL)animated  {
    if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
    else 
        [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
}
0
répondu Louie 2011-11-30 15:19:50

Le [[UIApplication sharedApplication] setStatusBarHidden:BOOL]; est suffisant, mais:

  1. Rappelez-vous de le remettre à NO avant de quitter la vue ou la page sur laquelle vous revenez aura probablement la barre de navigation sous la barre d'état.

  2. Assurez-vous de définir à la fois la barre d'état masquer et afficher dans la vue dans laquelle vous souhaitez masquer la barre d'état. J'ai fait l'arrêt dans la méthode viewDidLoad, et - fondamentalement - le retour sur la méthode viewWillDisappear:animated. Un peu plus tard et vous êtes dans les problèmes.

-1
répondu David 2013-07-07 14:00:34