2010-08-22 14 views
21

Tan pronto como agregue una subvista de UIImagePickerController a mi vista, la barra de estado desaparece y no puedo recuperarla. ¿Hay alguna forma de mantener visible la barra de estado?iOS SDK - ¿Cómo recuperar la barra de estado cuando se usa UIImagePickerController?

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 


[self.view addSubview:imagePicker.view]; 

[imagePicker viewWillAppear:YES]; 
[imagePicker viewDidAppear:YES]; 

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; 

Respuesta

29

Tuve que hacer lo mismo en una aplicación de cámara también. Aparentemente, además de configurar la barra de estado para que no se oculte, también debe restablecer su estilo después de que la vista de la cámara lo haga desaparecer. Prueba esto:

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

Brad, esto no funciona para mí, lo estoy haciendo en loadView, viewDidLoad y viewDidAppear todo en vano. –

+0

Brad, esto funcionó bien para mí. De hecho, tuve que usar setStatusBarHidden al cambiar entre la cámara y la biblioteca de fotos sourceType. – cpungaliya

+0

¿Cómo puedo obtener un control sobre esta barra de estado para que pueda mostrar algo de texto mientras mi aplicación está en segundo plano? – Namratha

1

Añadir su UIImagePicker a la vista raíz (es decir, un regulador de la navegación o tabBarController)

[self.tabBarController presentModalViewController:imagePickerController animated:YES]; 

Después de que se puede utilizar

- (void)imagePickerController:(UIImagePickerController *)picker 
      didFinishPickingImage:(UIImage *)image 
         editingInfo:(NSDictionary *)editingInfo 
{ 
     // do your stuff 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

cerrar su ImagePicker.

+0

Hola Henrik, gracias por su respuesta. Quiero que la barra de estado esté visible todo el tiempo. ¿Es eso posible? – dan

0

bien, sé que no se supone que para hacer esto, pero si subclase UIImagePickerController, se puede poner esto en la clase personalizada:

-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES]; 
} 
6

Después de leer esto y no encontrar ninguno de las respuestas trabajadas, me las arreglé para conseguir que funcione de la siguiente manera:

• Configuración de un delegado para la UIImagePickerController
• en ese delegado, ocultar la barra de estado en navigationController:didShowViewController:animated: fu del delegado nction.

Ejem:

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

¡esto funcionó para mí! – ninjaneer

0

Ninguna de las soluciones trabajó en iOS 5.1.1 solución de Tim trabajó en iOS 4.2.1 La única manera de que era capaz de solucionar el problema en IOS 5.1.1 fue como que

-(void)viewDidAppear:(BOOL)animated 
{ 
    double delayInSeconds = 0.01; 
    dispatch_time_t popTime = 
      dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    [[UIApplicationsharedApplication] setStatusBarHidden:NO]; 
}); 

que es muy raro e incorrecto.

Pasé medio día buscando una solución y luego decidí usar el enfoque AVFoundation y me llevó una hora implementar la misma captura básica de fotos que necesitaba usando AVCaptureSession y AVCaptureStillImageOutput. Y también funciona mejor: AVCaptureSession se inicia más rápido que UIImagePickerController y AVCaptureVideoPreviewLayer tiene una tasa de cuadros mucho mejor en dispositivos modernos en comparación con la vista previa de la cámara UIImagePicker.

15

La solución de la respuesta aceptada quedó obsoleta mientras tanto.

Uso

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 

en lugar de

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; 

Los valores válidos para el parámetro de la animación son UIStatusBarAnimationNone, UIStatusBarAnimationFade, UIStatusBarAnimationSlide. Los detalles se encuentran en el documentation.

Cuestiones relacionadas