web-dev-qa-db-fra.com

Sous iOS 7, comment masquer et afficher la barre d'état à la volée (chaque fois que je le souhaite)

Supposons qu'un utilisateur se trouve dans un contrôleur de vue et souhaite entrer dans un mode de type "plein écran" où la barre d'état est masquée. Sous iOS 6, il s'agissait d'un simple appel de méthode pour afficher/masquer la barre d'état, mais quoi qu'il en soit persister sous iOS 7.

J'ai vu des solutions comme celle-ci:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Mais cela ne lui permet pas d'être basculé au moment de l'exécution. (Il n'accepte aucun argument.)

Dans mon info.plist, j'ai View controller-based status bar appearance défini sur NO.

Je suis à bout. Comment puis-je le cacher?

26
Doug Smith

Swift 4

spectacle:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = false

cacher:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = true



Objectif c

Eh bien voici une façon de faire ceci:

dans myViewController.h 

@interface myViewController : UIViewController {
    BOOL shouldHideStatusBar;
}

Puis dans myViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];
    shouldHideStatusBar = YES;
}

- (BOOL)prefersStatusBarHidden {
    return shouldHideStatusBar;
}

et disons que lorsque je touche l'écran, il devrait maintenant afficher la barre d'état. Vous devrez appeler: setNeedsStatusBarAppearanceUpdate spécifiquement pour que cela fonctionne, puis un commutateur (bool dans ce cas) pour afficher/masquer.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    shouldHideStatusBar = (shouldHideStatusBar)? NO: YES;
    [self setNeedsStatusBarAppearanceUpdate];
}

setNeedsStatusBarAppearanceUpdate

Cela devrait être appelé chaque fois que les valeurs de retour pour la vue Les attributs de la barre d'état du contrôleur ont changé. Si on l’appelle de au sein d'un bloc d'animation, les modifications seront animées avec le reste du bloc d'animation.

prefersStatusBarHidden:

Valeur de retour Une valeur booléenne de YES spécifie que la barre d'état doit être caché. La valeur par défaut est NO.

Discussion Si vous modifiez la valeur de retour pour cette méthode, appelez le Méthode setNeedsStatusBarAppearanceUpdate.

Pour spécifier qu'un contrôleur de vue enfant doit contrôler le paramètre préféré barre d'état masquée/non cachée, implémentez le childViewControllerForStatusBarHidden.


Si vous envisagez d'utiliser votre application avec iOS 6, vous voudrez peut-être aussi regarder cet article

74
John Riselvato

J'avais des problèmes avec certaines des autres réponses d'iOS 8, j'ai donc fait un peu plus de recherches et découvert: [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];. Vous pouvez ensuite activer/désactiver l'animation.

3
Johann Burgess

Recommandation

Pour la prise en charge d'iOS7, nous vous suggérons de ramener l'apparence de la barre d'état basée sur le contrôleur View à OUI. Cela vous permettra de contrôler les barres d'état dans le code. Le guide de transition iOS ( link ) fournit d'autres options pour gérer l'apparence de la barre d'état (il n'y a pas qu'un correctif unique ici, mais un certain nombre de paramètres garantissant que vous obtenez ce que vous voulez). Sachez également que même si vous définissez l'apparence dans le code, vous souhaiterez mettre à jour vos storyboards ou vos fichiers nib afin qu'ils correspondent à votre apparence par défaut (sinon, la barre d'état peut clignoter temporairement en fonction de l'endroit où vous avez défini le code pour mettre à jour la barre d'état). . Je vous recommande de définir le code avant que l'affichage ne s'affiche.

Après avoir défini votre propriété plist sur YES: assurez-vous que cette méthode existe dans UIViewController où vous souhaitez que la barre d'état disparaisse:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Affichage de la barre d'état

Renvoyez Non si vous souhaitez que la barre d'état apparaisse dans chacun de vos contrôleurs de vue.

Il peut y avoir un certain nombre d'autres problèmes liés à la barre d'état:

Approche alternative

Selon la documentation Apple, vous pouvez utiliser une autre méthode de gestion de la barre d'état en utilisant la méthode UIApplication indiquée dans la référence ci-dessous ( - lien ). setStatusBarHidden est toujours viable avec cette approche.

Option #2

Cette option vous permettra de continuer à utiliser les propriétés de la classe UIApplication si vous suivez les paramètres de plist ci-dessus.

UIApplication Status

Échantillons

Vous pouvez trouver des exemples de code de l'option alternative de la barre d'état mentionnée ci-dessus dans:

2
Tommie C.

Si le contrôleur de vue qui est à l'écran est le contrôleur de vue racine, vous devriez simplement pouvoir implémenter la fonction. 

- (BOOL)prefersStatusBarHidden {
    return _showStatusBar;
}

avec _showStatusBar étant une BOOL, chaque fois que vous modifiez cette propriété, appelez [self setNeedsStatusBarAppearanceUpdate]

Si le contrôleur de vue se trouve dans quelque chose d'autre, par exemple une UINavigationController, vous devez d'abord implémenter la méthode - (UIViewController *)childViewControllerForStatusBarHidden sur le contrôleur parent et renvoyer l'instance de contrôleur de vue actuellement présentée.

Ceci est tout avec View controller-based status bar appearance défini à YES

0
Evan