Dans mon fichier .plist, j'ai défini " Afficher l'apparence de la barre d'état basée sur le contrôleur " sur NO
. Mais après UIImagePickerController
, mon application se comporte comme si l'option était définie sur YES
.
Dans mon application, je présente un VC qui présente un fichier UIImagePickerController
.
Le problème se produit comme ceci:
- Une fois le sélecteur de photos présenté, lorsqu'une photothèque est sélectionnée, la couleur du texte de la barre d'état change.
- Puis une fois,
UIImagePickerController
est rejeté, l'espacement de la barre d'état change pour le reste de mon application et toute la barre de navigation pour les autres contrôleurs s'affiche sous la barre d'état.
Existe-t-il un moyen de résoudre ce problème sans gérer la barre d'état dans mes contrôleurs de vue?
Réponses:
Aucune des solutions ci-dessus n'a fonctionné pour moi, mais en combinant les réponses de Rich86man et iOS_DEV_09, j'ai une solution qui fonctionne constamment:
et
En ce qui concerne cette solution géniale. Pour 2014 / iOS8, j'ai trouvé que dans certains cas, vous devez ÉGALEMENT inclure
prefersStatusBarHidden
et, éventuellement,childViewControllerForStatusBarHidden
So ...J'espère que ça aide quelqu'un
la source
J'ai été confronté à ce même problème aujourd'hui. Voici ma solution.
Dans le contrôleur de vue qui appelle le sélecteur d'images, définissez-vous comme délégué du sélecteur d'images. (Vous faites probablement déjà cela)
Étant donné que UIImagePickerController est un type de contrôleur de navigation, vous vous définissez également en tant que délégué UINavigationController. Ensuite :
Remplacez UIStatusBarStyleLightContent par le style que vous recherchez.
la source
La réponse acceptée fonctionnera si vous avez défini `` Afficher l'apparence de la barre d'état basée sur le contrôleur '' sur NON dans votre fichier .plist. Si en effet vous devez contrôler la barre d'état dans certains autres contrôleurs de vue et que cette option est définie sur OUI, l'autre façon de faire en sorte que UIImagePickerController se comporte correctement est de le sous-classer
la source
j'ai fait face au même problème.
voici ma solution. placez-le dans la vue Apparaîtra du contrôleur de vue à partir duquel vous ouvrez la sélection d'image
la source
Pouvez-vous essayer ceci. Je pense que needsStatusBarApperanceUpdate fonctionnera.
la source
J'ai trouvé cela pour offrir une bonne manipulation, il y a deux parties.
le UIImagePickerController lui-même présente les contrôleurs de vue, donc ce délégué fonctionne pour tous les présentateurs de la pile.
viewWillAppear garantit que ce contrôleur de vue lui-même est toujours réinitialisé chaque fois qu'un contrôleur de vue de présentation rejette au-dessus de lui.
la source
J'ai eu le même problème. Ajouter dans info plist: "Afficher l'apparence de la barre d'état basée sur le contrôleur" avec la valeur "NON"
Exemple ici https://stackoverflow.com/a/19211669
Cette solution fonctionne pour moi.
la source
C'est probablement un bug. J'ai résolu le problème en définissant «Afficher l'apparence de la barre d'état basée sur le contrôleur» sur OUI et dans chaque contrôleur de vue en collant le code suivant:
Ensuite, mon application se comporte comme prévu.
la source
Pour masquer la barre d'état dans UIImagePicker:
-
et lorsque UIImagePicker est ignoré pour masquer la barre d'état dans le contrôleur View, utilisez le code suivant:
la source
essaye ça ....
cela fonctionnera dans les deux cas, à savoir si vous utilisez presentModalViewController et pushViewController
déléguer des méthodes
la source
Tout ce qui précède n'a pas fonctionné pour moi. J'ai résolu le problème en modifiant le style de présentation en:
la source
Aucune des solutions ci-dessus n'a fonctionné pour moi.
Je présente UIImagePickerController comme contrôleur de vue modale. Après avoir ignoré UIImagePickerController, l'état de la barre d'état était:
La solution qui a résolu le problème pour moi était de restaurer statusBarOrientation après avoir ignoré UIImagePickerController:
la source
Ce code m'a aidé à personnaliser le style de la barre d'état.
EDIT: cette solution fonctionne si "Afficher l'apparence de la barre d'état basée sur le contrôleur" == OUI
la source
Toutes les réponses ci-dessus sont correctes et peuvent vous aider.
J'ai eu le même problème de devoir gérer l'application exécutée sous différentes versions d'iOS .
Puis, en délégué:
la source
Encore une autre solution qui peut fonctionner dans certaines situations.
la source
Avez-vous essayé d'appeler
[self setNeedsStatusBarAppearanceUpdate]
lorsque votre contrôleur d'affichage de présentation réapparaît?la source
J'essaie de masquer la barre d'état dans UIImagePickerController dans iOS7, mais je ne sais toujours pas comment faire cela. j'utilise
dans le ViewController qui appelle le UIImagePickerController et définissez "Afficher l'apparence de la barre d'état basée sur le contrôleur = NON" dans le fichier plist. J'espère que cela peut vous aider.
la source
essaye ça :
et dans la mise en œuvre du protocole, utilisez ceci:
la source
Cela a résolu le problème pour moi ...:
la source
Rien ici n'a spécifiquement résolu le problème en ce que j'avais (et peut-être que l'OP avait aussi), alors j'ai pensé que je partagerais ma réponse. Au lieu de cacher la barre d'état qui, je pense, est une solution buggy (j'ai remarqué qu'elle laissait parfois mon application dans un état où la barre d'état était masquée alors qu'elle ne devrait pas l'être). J'ai plutôt choisi d'essayer de jouer gentiment avec le
UIStatusBarStyles
.Lorsque UIImagePickerController a sa vue présentée, je règle le style de la barre d'état par défaut, car la couleur d'arrière-plan par défaut est un gris clair.
Ensuite, lorsque le sélecteur d'images est fermé, je le remets au format
UIStatusBarStyleLightContent
.la source
Dans ce cas, nous utilisons 2 étapes
Dans la première étape: ajoutez info.plist: "Afficher l'apparence de la barre d'état basée sur le contrôleur" avec la valeur "NON"
Dans la deuxième étape: utiliser / appeler ce code avec le délégué de UIImagePickerController
Dans le cas de l'IOS-7, ajoutez une fonction supplémentaire
la source
Depuis iOS 8.1, il semble qu'ils aient enfin corrigé ce bogue! J'ai pu supprimer toutes les solutions de contournement que j'ai employées de mon code.
la source
En utilisant le comportement par défaut d'iOS 8, j'avais des problèmes avec la barre d'état qui apparaissait lorsque je voulais la masquer.
La solution que j'ai trouvée était que, directement après avoir appelé
presentPopover
depuis mon contrôleur de vue, j'ai fait:J'ai également dû ajouter ceci à mon contrôleur de vue principal:
la source
J'ai donc eu ce problème et j'ai pu le résoudre en implémentant simplement une seule fonction de délégué. L'arrière-plan de ma barre d'état est noir, et donc UIStatusBarStyle pour mon application est .LightContent. Lorsque j'ai présenté UIImagePickerController pour sélectionner une photo dans le stockage de l'appareil, la barre d'état était bien. Cependant, en cliquant dans un répertoire tel que "Pellicule" ou "Favoris", poussant effectivement sur la pile de navigation, la barre d'état a disparu. Lors de la sélection d'une photo, il n'y avait pas du tout de barre d'état; lors du rejet d'un autre contrôleur de vue modale, seule la batterie était présente, indiquant que le reste de la barre d'état peut également être noir.
J'ai essayé certaines des autres solutions telles que l'extension de UIImagePickerController, mais dans Swift, vous ne pouvez pas remplacer l'utilisation d'extensions. J'ai ensuite essayé de sous-classer UIImagePickerController et essayé de masquer sa barre d'état sur viewWillAppear () et d'afficher la barre d'état sur viewWillDisappear. J'ai pu voir la barre d'état se cacher avec une animation .Slide, mais comme la barre d'état était invisible lors de la sélection d'un répertoire, je n'ai pas pu voir la barre d'état s'afficher. Encore une fois, la batterie verte est revenue avec le reste de la barre d'état invisible lors du rejet d'un contrôleur de vue modale. J'ai également essayé de remplacer prefersStatusBarHidden (), mais cette fonction n'a jamais été appelée, j'ai donc essayé d'appeler setNeedsStatusBarAppearanceUpdate () pour m'assurer que prefersStatusBarHidden () est appelé par le système, mais il n'est toujours pas appelé. Aussi, il est suggéré de définir la barre d'état à masquer sur la méthode déléguée navigationController willShowViewController. Encore une fois, tout cela ne fait que masquer la barre d'état, ce qui ne résout pas le problème. En fin de compte, il semble que le style de la barre d'état soit modifié lors de la poussée sur la pile de navigation de UIImagePickerController. Pour résoudre entièrement le problème, je n'ai pas eu à écrire d'extensions ou de sous-classe UIImagePickerController. Tout ce que vous avez à faire est de définir le délégué et de définir le style de la barre d'état pour qu'il reste le même. Cet ajout a fait comme si le problème n'avait jamais existé. il semble que le style de la barre d'état soit modifié lors de la poussée sur la pile de navigation de UIImagePickerController. Pour résoudre entièrement le problème, je n'ai pas eu à écrire d'extensions ou de sous-classe UIImagePickerController. Tout ce que vous avez à faire est de définir le délégué et de définir le style de la barre d'état pour qu'il reste le même. Cet ajout a fait comme si le problème n'avait jamais existé. il semble que le style de la barre d'état soit modifié lors de la poussée sur la pile de navigation de UIImagePickerController. Pour résoudre entièrement le problème, je n'ai pas eu à écrire d'extensions ou de sous-classe UIImagePickerController. Tout ce que vous avez à faire est de définir le délégué et de définir le style de la barre d'état pour qu'il reste le même. Cet ajout a fait comme si le problème n'avait jamais existé.
la source
En fait, j'ai trouvé un meilleur moyen de définir la couleur d'arrière-plan de la barre d'état dans le sélecteur d'images. Fondamentalement, vous devez définir backgroundImage de la navigationBar sur nil, car la valeur par défaut dans le sélecteur d'images a une backgroundImage en tant qu'image blanche.
la source