¿Cómo ocultar la barra de estado en UIImagepickercontroller?

Soy nuevo en el desarrollo de iOS. Estoy tratando de ocultar la barra de estado en UIImagePickerController . Cada vez que hago clic en “Tomar foto”, aparece la barra de estado. No se esconde. Quiero que la barra de estado esté oculta solo en UIImagePickerController .

Aquí está mi código,

 - (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]; } 

¿Cómo ocultar la barra de estado en UIImagePickerController ?

Tuve un problema donde en iOS7 mi barra de estado no se ocultaba. Lo oculté programáticamente y todavía se muestra en iOS7, pero cuando se ejecuta en iOS6, la barra de estado se oculta adecuadamente. Tienes que ir a la lista y agregar lo siguiente:

‘ver la apariencia de la barra de estado basada en el controlador’ y establecer en NO.

Si desea que la barra de estado vuelva a aparecer en otros controladores de vista y solo se oculte en un VC particular, entonces establece la barra de estado en YES oculto cuando se carga el VC. Cuando desaparezca el VC, establezca la barra de estado oculta a NO.

 - (void)viewDidLoad { [super viewDidLoad]; [[UIApplication sharedApplication] setStatusBarHidden:YES]; } 

y cuando el controlador desaparezca, agregue lo siguiente para configurar la barra de estado para que ya no esté oculta y se muestre en la siguiente Vista:

 -(void)viewWillDisappear:(BOOL)animated{ [[UIApplication sharedApplication] setStatusBarHidden:NO]; } 

setStatusBarHidden:withAnimation: si quieres animación suave

Esto funcionó bien para mi:

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

Editar: a partir de hoy descubrí que en su info.plist, si solo copia y pega la apariencia de la barra de estado basada en el controlador allí no funcionará … tiene que presionar enter en una propiedad, y desplazarse a el último de ellos, por lo que tendrá autocompletar para: ver la apariencia de la barra de estado basada en el controlador y un booleano, con no. Lo intenté varias veces pero no funciona solo copiando. Que tengas un buen día.

La solución que encontré para las aplicaciones se basa en: “Ver apariencia de la barra de estado basada en el controlador” establecido en SÍ

Añadí Categoría:

 //UIImagePickerController+StatusBarHidden.h #import  @interface UIImagePickerController (StatusBarHidden) @end //UIImagePickerController+StatusBarHidden.h #import "UIImagePickerController+StatusBarHidden.h" @implementation UIImagePickerController (StatusBarHidden) -(BOOL) prefersStatusBarHidden { return YES; } -(UIViewController *) childViewControllerForStatusBarHidden { return nil; } @end 

El método childViewControllerForStatusBarHidden se usa raramente, pero el selector de imágenes lo usa, por eso puede causar algunos problemas

También puede implementar UIViewController singleton, con un método que devuelve SÍ o NO, en función de su propiedad. A continuación, su controler View implementa childViewControllerForStatusBarHidden devolviendo el singleton anterior. Al cambiar la propiedad singleton, se cambia automáticamente la barra de estado en la aplicación. También existe el método gemelo childViewControllerForStatusBarStyle


Sin embargo, para 2014, iOS8, consulte este https://stackoverflow.com/a/18960308/294884

subclase UIImagePickerController … el mío es V1ImagePickerController …

El archivo .m se ve así:

 #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 es la clave!

Si desea deshabilitar la barra de estado de plist, intente esto:

  1. La barra de estado está inicialmente oculta: SÍ
  2. Ver la apariencia de la barra de estado basada en el controlador: NO

esto es necesario para iOS 7, funciona para mí. No sé si hay algunas otras técnicas para hacer esto en iOS7. Establezca estas dos tags en su info.plist.

Cada vez que aparece su controlador de visualización, en viewDidLoad o cuando el controlador del selector de imágenes finaliza, utilice esto:

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

Utilicé la respuesta de Silvertaurus anterior, pero con una pequeña modificación al método prefersStatusBarHidden que pensé que era muy útil:

 //UIImagePickerController+StatusBarHidden.h #import  @interface UIImagePickerController (StatusBarHidden) @end //UIImagePickerController+StatusBarHidden.h #import "UIImagePickerController+StatusBarHidden.h" @implementation UIImagePickerController (StatusBarHidden) -(BOOL) prefersStatusBarHidden { if (self.sourceType==UIImagePickerControllerSourceTypeCamera) { return YES; } else { return NO; } } -(UIViewController *) childViewControllerForStatusBarHidden { return nil; } @end 

Esto mantiene la barra de estado para el selector de imágenes cuando la cámara no se muestra.

Prueba esto

 [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES]; 

También mira esta discusión .

Por favor prueba esto

• Establecer un delegado para el UIImagePickerController

• ocultar la barra de estado en navigationController del delegado: didShowViewController: animated: function.

P.EJ:

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

Puedes hacerlo con una categoría:

 @interface UIImagePickerController (HideStatusBar) @end @implementation UIImagePickerController (HideStatusBar) - (BOOL)prefersStatusBarHidden { return YES; } - (UIViewController *)childViewControllerForStatusBarHidden { return nil; } @end 

Fuente: https://gist.github.com/psobko/9493473

 -(IBAction)takePhoto:(UIButton *)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypeCamera; [self statusBar:TRUE]; [self presentViewController:picker animated:YES completion:NULL]; } -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; self.imageView.image = chosenImage; [self statusBar:FALSE]; [picker dismissViewControllerAnimated:YES completion:NULL]; } -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [self statusBar:FALSE]; [picker dismissViewControllerAnimated:YES completion:NULL]; } -(void)statusBar:(BOOL)status { [[UIApplication sharedApplication] setStatusBarHidden:status]; } 

eso podría ayudarte a lograr lo que quieres.

Prueba mi respuesta publicada aquí si quieres seguir usando ViewController-Based Status Bar Appearance .

En mi caso, tuve que usar presentViewController para mostrar UIImagePickerViewController (iOS7).

1- Establezca la apariencia de la barra de estado basada en el controlador View en NO en .plist 2- Cree una categoría para UIImagePickerController y en viewDidLayoutSubviews:

 - (void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; [[UIApplication sharedApplication] setStatusBarHidden:YES]; } 

3- Agregó los dos métodos siguientes a la categoría:

 - (BOOL)prefersStatusBarHidden{ return YES; } - (UIViewController *)childViewControllerForStatusBarHidden{ return nil; } 

Espero que esto sea de ayuda.

Creo que resolví esto de una manera bastante simple sin crear subclases ni usar plist. solo se oculta para UIImagePickerController.

este ejemplo es solo para mostrar el gallary fotográfico, pero imagino que puede aplicarlo de la misma manera a cualquier lugar con uiimagepickercontroller

 - (void)showGallary { [CATransaction begin]; [CATransaction setCompletionBlock:^{ [[UIApplication sharedApplication] setStatusBarHidden:YES]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; }]; imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; [CATransaction commit]; } 

Quería tener la barra de estado oculta todo el tiempo, al abrirla, el selector de imágenes la muestra. Para ocultarlo, lo siguiente funcionó para mí a partir de iOS 8:

 -(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker { [self dismissViewControllerAnimated:YES completion:^{ [[UIApplication sharedApplication] setStatusBarHidden:YES]; }]; } -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissViewControllerAnimated:YES completion:^{ [[UIApplication sharedApplication] setStatusBarHidden:YES]; }]; // do stuff with photo } 

Tengo la View controller-based status bar appearance establecida en NO