iOS 7: la barre d'état du contrôleur de vue modale est de couleur incorrecte, mais les contrôleurs de vue normale sont corrects
J'ai un problème dans iOS7 où un normal UINavigationController poussé vue-contrôleur a la bonne barre d'état la couleur du texte pour le UINavigationController barre de navigation de couleur (qui est un gris clair, presque blanc, la barre d'état, le texte est noir). Toutefois, lorsqu'un "modal" - vue-contrôleur est présenté à l'aide -presentViewController:animated:completion:
la barre d'état la couleur du texte est changé à blanc et il est très difficile de voir la couleur de la barre de navigation. Barre de navigation de la couleur est toujours la même à l'échelle de l'ensemble de l'application et de ne pas changer pour chaque vue-contrôleur. Cela se produit sur tous les -presentViewController
appel.
"- Vue-contrôleur d'état basé sur l'apparence de la barre" est réglé sur OUI.
Je ne suis pas sûr de ce à regarder à essayer de le résoudre.
source d'informationauteur chadbag | 2013-12-16
Vous devez vous connecter pour publier un commentaire.
La manette de navigation décide d'avoir une lumière ou d'obscurité de contenu basé sur sa barre de navigation du
barStyle
de la propriété. La valeur par défaut,UIBarStyleDefault
signifie la barre de navigation a une couleur de lumière et de la barre d'état aura sombre de contenu. Modification de cette propriété àUIBarStyleBlack
n'est pas réellement faire la barre de navigation noire (la couleur de la barre de navigation est toujours définie à l'aide debarTintColor
), mais il lui dit qu'il a une couleur sombre. La manette de navigation décide alors que, depuis la barre de navigation est sombre, il devrait mettre la barre d'état de contenu à la lumière.Il apparaît que sur le principal de votre manette de navigation (sur lequel vous poussez les choses) le
barStyle
est en effet fixé àUIBarStyleBlack
quelque part. Vous devez faire la même chose pour le modal présenté manette de navigation, comme suit:ensemble YourModalViewControler.modalPresentationCapturesStatusBarappearance OUI et garder "- Vue-contrôleur d'état basé sur l'apparence de la barre de" sur "OUI".
puis écraser preferredStatusBarStyle
Vous pouvez redéfinir le preferredStatusBarStyle méthode de votre manette de navigation de la classe
et vous pouvez également définir un "point de vue ne méthode load" pour définir les couleurs personnalisées que vous voulez
Je viens de comprendre comment faire. J'ai eu exactement le même problème et il semble que ça fonctionne comme un charme!
La première chose que vous devez faire est de modifier un attribut en vous .fichier plist de votre projet à PAS de. L'attribut est: "- Vue-contrôleur d'état basé sur l'apparence de la barre". Si l'attribut n'existe pas, n'hésitez pas à en ajouter un nouveau, exactement comme je viens de vous écrire (sans les guillemets).
La deuxième chose, c'est d'ajouter à chaque point de vue du contrôleur de la méthode viewDidLoad
si vous voulez que votre barre d'état du texte à être de couleur blanche ou
si vous voulez que votre barre d'état du texte à être noir.
C'est tout!
Cela fonctionne. Mais je ne suis pas heureux avec elle parce que c'est un très orthodoxe. Je pense que c'est un bug qui
preferredStatusBarStyle
n'est pas appelé à modale de vue. Va demander à Apple.ensemble UIViewControllerBasedStatusBarAppearance à PAS dans votre info.plist
J'ai eu le même problème que vous. L'info.plist était correct et partout ailleurs preferredStatusBarStyle a été appelée correctement. Mais pas dans mon modal vue. C'est parce que preferredStatusBarStyle a été envoyé à la manette de navigation. J'ai donc fait une sous-classe de UINavigationController qui a passé preferredStatusBarStyle à la vue du contrôleur, il a été présenté, et le tour est joué, tout était de se comporter comme il se doit de nouveau
Après avoir examiné toutes les réponses fournies ici et dans d'autres réponses, j'ai trouvé que la seule solution qui a fonctionné pour moi a été de créer un vide de la barre de navigation pour la vue-contrôleur, je suis présente sous forme modale.
Cela peut ne pas fonctionner pour vous, mais cela fonctionne pour moi pour les raisons suivantes:
applicationDidFinishLaunching
comme discuté ci-dessus, et il a une couleur personnalisée.C'est un peu gênant d'un point de vue technique d'avoir une manette de navigation qui effectivement ne fait rien, mais sans qu'un j'ai été incapable d'obtenir au-delà de ce problème.
Ma solution:
Par défaut, UINavigationController décide de la barre d'état de style et remplace tous les sous afficher les contrôleurs de styles. Toutefois, lorsqu'un modal-vue-contrôleur est en mode plein écran, sa méthode
preferredStatusBarStyle
est appelé.