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?
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
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.
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.
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.
Échantillons
Vous pouvez trouver des exemples de code de l'option alternative de la barre d'état mentionnée ci-dessus dans:
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