27 votes

Comment masquer la barre d'état dans UIImagepickercontroller?

Je suis nouveau dans le développement iOS. J'essaie de masquer la barre d'état dans UIImagePickerController . Chaque fois que je clique sur "Prendre une photo", la barre d'état apparaît. Ça ne se cache pas. Je souhaite que la barre d'état soit masquée uniquement dans UIImagePickerController .

Voici mon code,

 - (IBAction)takePhoto:(UIButton *)sender
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    [self presentViewController:picker animated:YES completion:NULL];
}


- (void)imagePickerController:(UIImagePickerController *)picker     didFinishPickingMediaWithInfo:(NSDictionary *)info
{   
    [self statusBar:YES];
    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.imageView.image = chosenImage;
    [picker dismissViewControllerAnimated:YES completion:NULL];

}


- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissViewControllerAnimated:YES completion:NULL];
}


-(void)statusBar:(BOOL)status
{
    [[UIApplication sharedApplication] setStatusBarHidden:status];
}
 

Comment masquer la barre d'état sur UIImagePickerController ?

46voto

Alexandru Dranca Points 475

CA marchait bien pour moi:

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

Edit: À partir d'aujourd'hui, je viens de découvrir que dans votre info.plist, si vous copiez-collez simplement l'apparence de la barre d'état basée sur le contrôleur, cela ne fonctionnera pas ... vous devez appuyer sur Entrée sur une propriété et faire défiler jusqu'à le dernier d'entre eux, vous aurez donc la saisie semi-automatique pour: afficher l'apparence de la barre d'état basée sur le contrôleur et un booléen, sans. J'ai essayé plusieurs fois mais cela ne fonctionne pas simplement en copiant. Bonne journée.

26voto

Silvertaurus Points 221

La solution que j'ai trouvé pour les applications construites autour de : "- Vue-contrôleur d'état basé sur l'apparence de la barre de" la valeur OUI

J'ai fait ajouter une Catégorie:

//UIImagePickerController+StatusBarHidden.h
#import <UIKit/UIKit.h>

@interface UIImagePickerController (StatusBarHidden)
@end

//UIImagePickerController+StatusBarHidden.h
#import "UIImagePickerController+StatusBarHidden.h"

@implementation UIImagePickerController (StatusBarHidden)

-(BOOL) prefersStatusBarHidden {
    return YES;
}

-(UIViewController *) childViewControllerForStatusBarHidden {
    return nil;
}

@end

La méthode childViewControllerForStatusBarHidden est rarement utilisé, mais l'image du sélecteur de faire de l'utiliser, c'est pourquoi peut entraîner certains troubles

Vous pouvez également mettre en œuvre UIViewController singleton, avec la méthode qui retourne OUI ou NON, basée sur sa propriété. Ensuite, votre point de Vue controleller implémente childViewControllerForStatusBarHidden de retour ci-dessus singleton. Changement de singleton propriété de modifier automatiquement la barre d'état dans l'app. Il y a aussi les jumeaux méthode childViewControllerForStatusBarStyle


Cependant, pour 2014, iOS8, voir ce http://stackoverflow.com/a/18960308/294884

17voto

ConfusedDeer Points 601

J'ai eu un problème où dans iOS7 ma barre d'état n'était pas cachée. Je l'ai caché par programme et il s'affiche toujours dans iOS7, mais lorsqu'il est exécuté dans iOS6, la barre d'état se cache correctement. Vous devez aller dans le plist et ajouter ce qui suit:

'afficher l'apparence de la barre d'état basée sur le contrôleur' et régler sur NON.

16voto

user2797041 Points 161

sous-classe UIImagePickerController ... le mien est V1ImagePickerController ...

Le fichier .m ressemble à ceci:

 #import "V1ImagePickerController.h"

@interface V1ImagePickerController ()

@end

@implementation V1ImagePickerController

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)   // iOS7+ only
    {
        self.edgesForExtendedLayout = UIRectEdgeNone;

        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    }
}

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden
{
    return nil;
}

@end
 

childViewControllerForStatusBarHidden est la clé!

6voto

metsburg Points 1149

Si vous souhaitez désactiver la barre d'état de plist, essayez ceci:

  1. La barre d'état est initialement masquée: OUI
  2. Afficher l'apparence de la barre d'état basée sur le contrôleur: NON

cela est nécessaire pour iOS 7, fonctionne pour moi. Je ne sais pas s'il existe d'autres techniques pour le faire dans iOS7. Définissez ces deux balises dans votre info.plist.

Chaque fois que votre viewcontroller apparaît, dans viewDidLoad ou lorsque le contrôleur du sélecteur d'images se termine, utilisez ceci:

  - (void) imagePickerController:(UIImagePickerController *)picker1 didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
   [[UIApplication sharedApplication] setStatusBarHidden:YES];
 .
 .
 .
 .
 }
 

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