138 votes

UIImagePickerController brise l'apparence de la barre d'état

Dans mon .fichier plist, j'ai "Vue-contrôleur d'état basé sur l'apparence de la barre de" la valeur NO. Mais après UIImagePickerController, mon application se comporte comme si l'option est envoyé à OUI.

Dans mon application, je vous présente un VC qui présente un UIImagePickerController.

Le problème se fait comme ceci:

  • Après la sélection des photos est présenté, à quand une photo de la bibliothèque sélectionnée, la couleur de la barre d'état du texte les changements.
  • Puis des fois, UIImagePickerController est rejeté, la barre d'espacement des changements pour le reste de mon application, la barre de navigation pour les autres
    les contrôleurs s'affiche sous la barre d'état.

Est-il un moyen de résoudre ce sans gestion de la barre d'état, à mon avis, les contrôleurs?

193voto

dpjanes Points 3333

Aucune des solutions ci-dessus n'a fonctionné pour moi, mais en combinant les réponses de Rich86man et iOS_DEV_09, j'ai trouvé une solution cohérente:

 UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
 

et

 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
 

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 Donc ...

 -(void)navigationController:(UINavigationController *)navigationController
        willShowViewController:(UIViewController *)viewController
        animated:(BOOL)animated
    {
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

-(BOOL)prefersStatusBarHidden   // iOS8 definitely needs this one. checked.
    {
    return YES;
    }

-(UIViewController *)childViewControllerForStatusBarHidden
    {
    return nil;
    }

-(void)showCamera
    {
    self.cameraController = [[UIImagePickerController alloc] init];
    self.cameraController.delegate = (id)self; // dpjanes solution!
    etc...
 

J'espère que ça aide quelqu'un

84voto

Rich86man Points 2008

J'ai fait face à ce même problème aujourd'hui. Voici ma solution

Dans le contrôleur de vue qui appelle le sélecteur d'image, définissez-vous en tant que délégué du sélecteur d'image. (Vous faites probablement déjà cela)

 UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
 

Comme UIImagePickerController est un type de contrôleur de navigation, vous vous définissez également comme délégué UINavigationController. Alors :

 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
 

Remplacez UIStatusBarStyleLightContent par le style que vous recherchez.

10voto

mgcm Points 123

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 NO dans votre fichier .plist. Si en effet vous devez contrôler la barre d'état dans d'autres contrôleurs de vue et que cette option est définie sur YES, l'autre moyen de faire en sorte que UIImagePickerController se comporte correctement est de le sous-classer.

 // .h
@interface MYImagePickerController : UIImagePickerController
@end

// .m
@implementation MYImagePickerController
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent; // change this to match your style
}
@end
 

6voto

iOS_DEV Points 326

J'ai rencontré le même problème.

voici ma solution. mettre cela dans le viewWillAppear du contrôleur de vue à partir duquel vous ouvrez la sélection de l'image

 -(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];

[[UIApplication sharedApplication] setStatusBarHidden:YES];

}
 

4voto

Jesse Tayler Points 26

J’ai trouvé ceci pour offrir une gestion correcte, il y a deux parties.

le UIImagePickerController présente vue contrôleurs, ce délégué fonctionne pour tous les intervenants sur la pile.

le viewWillAppear assure que cet vue contrôleur lui-même est toujours remis à zéro chaque fois qu’un contrôleur de vue présentant rejette au-dessus d’elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X