Comment changer UIStatusBarStyle dans iOS 7 sur le mode de vues avec la barre de navigation?
La iOS 7 Guide de Transition donner une bonne idée de comment changer la UIStatusBarStyle
de manière dynamique dans un UIViewController
à l'aide de
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
avec [self setNeedsStatusBarAppearanceUpdate];
Cela fonctionne bien dans une vue unique de l'application. Cependant, je vais maintenant essayer de changer le UIStatusBarStyle
dans une modal vue de UIStatusBarStyleLightContent
. Il y a un MainViewController
qui enchaîne à la ModalViewController
, lui-même imbriqué dans un NavigationController
. Le ModalViewController
a mis son délégué à la MainViewController
.
J'ai essayé d'appeler [self setNeedsStatusBarAppearanceUpdate];
dans le ModalViewController
avec la méthode suivante dans la classe que sans effet:
//In ModalViewController.m
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
J'ai aussi essayé d'appeler [self setNeedsStatusBarAppearanceUpdate];
dans MainViewController
sur prepareForSegue: sender:
méthode avec les conditions dans - (UIStatusBarStyle)preferredStatusBarStyle {}
de retour UIStatusBarStyleLightContent
lorsque le modal point de vue est présenté - mais qui n'a pas d'effets, trop.
Comment puis-je changer la UIStatusBarStyle modale vue?
EDIT: Post mis à jour: j'ai besoin de mentionner que la ModalViewController
est incorporé dans un NavigationController
avec un NavigationBar
. Avec NavigationBar
la valeur hidden-dessus à l'appel de [self setNeedsStatusBarAppearanceUpdate];
dans ModalViewController
fonctionne très bien. Mais pas quand la Barre est visible.
Dans
viewDidLoad
méthodeQu'en est-il
-viewWillAppear:
?ne fonctionne pas dans
viewWillAppear
et ne fonctionne pas dans viewDidAppear
tropJ'ai réalisé que le problème est le NavigationBar (voir la Modifier). Sans barre de navigation [auto setNeedsStatusBarAppearanceUpdate] dans ModalViewController œuvres
OriginalL'auteur FrankZp | 2013-09-25
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'un ViewController qui est en plein écran pour revenir à l'état approprié de la barre d'infos. Dans votre cas: Le NavigationController qui contient ModalViewController besoins pour mettre en œuvre
preferredStatusBarStyle
et retourUIStatusBarStyleLightContent
.Un appel à
setNeedsStatusBarAppearanceUpdate
est nécessaire uniquement si les valeurs de vue contrôleur retourne réellement changer. Lorsque le contrôleur est d'abord présenté ils sont interrogés de toute façon.Comment puis-je mettre en œuvre le preferredStatusBarStyle dans mon AppDelegate? J'ai un TabBarViewController conduisant à 4 NavControllers qui conduisent à UIViewControllers, devrais-je essayer ce dans une classe pour l'Onglet de la Barre? dans le Navcontrollers? ou dans AppDelegate? -J'ai besoin de toutes les barres d'état mis à LightContent
Dans votre cas, c'est probablement une sous-classe de TabBarViewController qui a de mettre en œuvre
preferredStatusBarStyle
preferredStatusBarStyle
ne s'appelait pas pour moi parce que j'ai utiliséUIModalPresentationOverFullScreen
au lieu deUIModalPresentationOverCurrentContext
!OriginalL'auteur jaetzold
Nous devrions remarquer que la non-fullscreen modalVC PEUT utilisation
modalPresentationCapturesStatusBarAppearance
pour contrôler la barre de style.Tous ceux qui veulent en savoir plus sur le Statut de la Barre de contrôle ne devraient pas ignorer les UIViewController la Gestion de la Barre d'État.
Mise à jour 2015-11-06:
Et assurez-vous que vous avez défini
UIViewControllerBasedStatusBarAppearance
décrit dans iOS ClésMise à jour 2018.04.09:
J'ai remarqué que viewController dans un navController ne pouvez pas obtenir appeler
prefersStatusBarHidden
avec iOS 10.0 - 10.2. Personnalisé votre navigationController pour s'assurer queEt tous ceux qui veulent aller plus loin à l'intérieur peut creuser dans UIKit
+[UIViewController _currentStatusBarStyleViewController]
à l'aide de la Trémie ou IDA Pro. Il peut vous aide à résoudre ce genre de bugs.Parfait, c'est exactement le problème que j'ai été confronté, qu'une coutume présenté VC n'était pas la modification de la barre d'état de l'apparence et de la vue précédente était toujours interrogée.
OriginalL'auteur Puttin
La clé pour faire ce travail, c'est que seule la vue plein écran du contrôleur est de dicter le style de la barre d'état.
Si vous utilisez une manette de navigation et que vous souhaitez contrôler la barre d'état par la vue du contrôleur de base, vous aurez envie de la sous-classe UINavigationController et de mettre en œuvre preferredStatusBarStyle telle qu'elle retourne le topViewController de préférence.
Assurez-vous de changer la classe de référence dans votre storyboard scène fromUINavigationController à votre sous-classe (p. ex. MyNavigationController dans l'exemple ci-dessous).
(Le suivant fonctionne pour moi. Si votre application est TabBar base, vous aurez envie de faire quelque chose de semblable par dérivation de l'UITabBarController mais je n'ai pas essayé).
OriginalL'auteur Juddster
Pour modifier la barre d'état de la UINavigationController à l'incorporation de votre ViewController sans sous-classement UINavigationController, utilisez ceci:
.Black fera le texte blanc (barre d'état et l'affichage du titre), tandis que .Par défaut est noir de titre et la barre d'état.
OriginalL'auteur Alex Wally
J'ai eu un menu latéral/révéler contrôleur (SWRevealController) qui s'avère toujours être la racine de contrôleur pour la barre d'état requêtes. Primordial
childViewControllerForStatusBarStyle
permettez-moi de re-router la requête à l'avant de la plupart contrôleur.OriginalL'auteur Graham Perks
Il semble que l'app va sur le statusBarStyle de la plus haute viewController. Donc, si vous ajoutez un autre viewController sur le dessus de votre actuel, il prend ses repères à partir de la nouvelle viewController.
OriginalL'auteur William Jockusch
Cela fonctionne pour moi:
View controller-based status bar appearance
àNO
UIStatusBarStyleLightContent
(il suffit de copier cette valeur)[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Espère que cela aide (ref: ios7 barre d'état de changer à nouveau de noir sur les points de vue modal?)
OriginalL'auteur samthui7
Il suffit de regarder si votre application rootViewController besoin de redéfinir -(UIStatusBarStyle)preferredStatusBarStyle méthode
OriginalL'auteur devClown
Tout le travail ci-dessus. Cependant, parfois, je trouve ça vraiment une douleur dans le bas à l'aller et changer tous les cas, dans la table de montage séquentiel etc... Donc voici quelque chose qui fonctionne pour moi, qui implique également des sous-classement.
D'abord créer le sous-classe:
Puis à l'aide de la magie de l'Objective-C et un peu de la <objc/runtime.h>
Lorsque vous avez une référence de la vue-contrôleur et votre présentation:
Parfois, il semble un peu moins intrusif. Vous pourriez même créer une catégorie qui vérifie pour voir si votre kindOfClass est une manette de navigation et de auto de le faire pour vous. De toute façon, la réponse est ci-dessus par jaetzold, j'ai juste trouvé ça pratique.
OriginalL'auteur bainfu