web-dev-qa-db-fra.com

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

Je souhaite afficher la barre d'état de mon application dans toutes les vues sauf une. J'ai essayé de modifier la 'barre d'état est initialement cachée' dans la liste, j'ai essayé:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

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

J'ai également essayé de modifier la mise en page des paramètres plein écran et de la barre d'état dans le bit "générateur d'interface" de Xcode 4.2.

Aucune suggestion?

EDIT - SORT OF 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 souhaite que la barre d’état soit affichée.

Il semble toujours saccadé et poubelle 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 l'instabilité en incluant setStatusBarHidden = NO dans viewWillAppears. Dieu sait comment tout fonctionne, mais c'est le cas.

33
Adam Waite

Essayez celui-ci, il fonctionnera parfaitement ..

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Et dans XIB, ne définissez aucune option pour la barre d'état.

pour iOS 7.

Accédez à info.plist et ajoutez deux attributs s'ils ne sont pas présents. 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
Kartik
#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
neoneye

S'il y a quelqu'un qui recherche une solution où la solution ci-dessus ne fonctionne pas (et il y a toujours un écart bleu 20px ennuyeux en haut), essayez de le mettre dans la vueWillAppear sur le fichier d'implémentation du contrôleur de vue dont vous souhaitez le statut barre à cacher.

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

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

8
Adam Waite

La solution de Kartik a fonctionné pour moi.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

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

- (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, sim iOS5.

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 StatusBar: rien d'autre n'a été déduit.

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

Voila, tout a bien fonctionné.

7
WillShakes

Je sais que c'est une vieille question, mais aucune de ces réponses ne fonctionne pour moi, c'est donc comme cela que cela fonctionne pour moi de masquer la barre d'état dans une seule vue

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 le parentViewController, cette fonction oblige à 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 cela aidera quelqu'un.

2
Patricio Bravo

C'est une 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
Sihad Begovic

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 ça t'aide

1
Fran Sevillano

Voici un extrait de code qui pourrait vous aider. Lorsque la vue se charge, 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
Louie