2012-03-20 16 views
9

He creado una aplicación que implementa la cámara del iPhone. ¡Cuando el usuario termina de seleccionar su imagen, la barra de estado vuelve a aparecer! ¿Cómo me aseguraré de que la barra de estado permanezca oculta?iPhone - Eliminar barra de estado programáticamente

Aquí está mi código:

-(IBAction)pickImage:(id)sender { 
UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
[self presentModalViewController:picker animated:YES]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
[picker dismissModalViewControllerAnimated:YES]; 
background.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

} 

si estoy haciendo algo mal, por favor señalarlo! Gracias , Rafee

+0

Si configure la barra de estado para que esté inicialmente oculta en la información de su aplicación .plist la barra de estado permanecerá oculta. –

+1

No, la barra de estado no permanecerá oculta. Acabo de hacer una prueba sobre esto; parece ser un error, que es 100% duplicable (al menos para mí) en dismissModalViewController para un UIImagePicker con tipo UIImagePickerControllerSourceTypeSavedPhotosAlbum. Esto no sucede para Camera ni PhotoLibrary. –

Respuesta

29
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 

Usted puede optar por otro estilo de animación en todo caso.

+0

En realidad, hay un error en UIKit, que está experimentando el OP. –

+0

Funciona perfectamente, tenía el mismo problema con imagePicker –

+0

obsoleto en ios 9 ahora – cdub

0

Parece que hay un error en el mecanismo de descarte de UIViewController asociado con UIImagePicker, con un sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum.

En el momento de la llamada a dismissModalViewController (más el método de finalización :) propiedad oculta barra de estado del UIApplication cambia instantáneamente de SI a NO, y se dibuja en el momento de pasar por encima de despedir ...

Esto solo es realmente obvio para las aplicaciones que usan una vista de pantalla completa. Mi proyecto de aplicación actual sí lo hace, además de que controlo el marco de la vista del controlador de vista antes de presentar, por lo que el UIImagePicker NO es pantalla completa. Esto hizo que el error fuera MUY obvio. Pasé 4-5 horas para determinar la causa, y esta fue la última conclusión, y el error NO ocurre para sourceType Camera ni PhotoLibrary.

Así que si quieres una aplicación de pantalla completa a la perfección y desea presentar una UIImagePicker libre de errores, evitar UIImagePickerControllerSourceTypeSavedPhotosAlbum

20

En iOS 7, hay un método en UIViewController, "prefersStatusBarHidden". Para ocultar la barra de estado, añadir este método para el controlador de vista y volver SÍ:

- (BOOL) prefersStatusBarHidden 
{ 
    return YES; 
} 
0

Gran despacho central es su amigo, el uso de este método no verá la barra de estado aparece en absoluto cuando se muestra el selector o posteriormente

- (void)hideStatusBar 
{ 
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
    { 
     [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; 
    } 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
} 

- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 

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

    [self hideStatusBar]; 
    double delayInSeconds = 0.2; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self hideStatusBar]; 
    }); 
} 
4

en este caso, estamos utilizando 2 pasos

en primer paso: Añadir en info.plist: "Ver aspecto de la barra de estado basado en un controlador" con el valor "NO"

En Segundo paso: Uso/llamar a este código con delegado de UIImagePickerController

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

Con iOS 7 y versiones posteriores, puede utilizar el siguiente código para ocultar y mostrar la barra de estado,

@interface ViewController() 

@property (nonatomic, getter=isStatusBarHidden) BOOL statusBarHidden; 

@end 

@implementation ViewController 


    ... other codes 

- (BOOL)prefersStatusBarHidden { 
    return self.isStatusBarHidden; 
} 

- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { 
    return UIStatusBarAnimationFade; 
} 

- (void)hideStatusBar { 
    self.statusBarHidden = YES; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 

- (void)showStatusBar { 
    self.statusBarHidden = NO; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 

@end 
Cuestiones relacionadas