2010-06-05 13 views
15

UIImagePickerController cambia el estilo de barra de estado a negro/opaco. Quiero mantener el estilo de barra de estado negro/translúcido. Estoy encontrando una manera de evitar el cambio del estilo de la barra de estado. O haciendo que transite sin problemas. Ahora, la presentación de UIImagePickerController cambia el estilo de la barra de estado al instante, incluso - [presentModalViewController: picker animated: YES] especificado.¿Hay alguna manera de evitar que UIImagePickerController cambie el estilo de la barra de estado?

Cualquier método, bienvenido, incluido el pirateo o el método privado. Esta es una aplicación para AppStore, sin embargo, quiero intentarlo.

Respuesta

0

Si desea deshabilitar por completo el cambio del estilo de la barra de estado, puede agregar una categoría UIApplication que lo bloquee.

@implementation UIApplication (MyCategory) 
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle {} 
@end 

Si eso funciona, pero desea desactivar selectivamente cambios, intente UIApplication subclases para que pueda llamar súper cuando se quiere pasar el cambio a través.

+0

Oh no funciona. También probé la subclase UIApplication, pero tampoco funcionó. Tal vez UIImagePickerController está utilizando un método privado. – Eonil

39

Quería que la barra de estado permanezca negra opaca mientras se muestra el selector de la biblioteca de fotos (el selector de fotografías lo cambia a negro translúcido) y esto me solucionó el problema.

Establecer la UIImagePickerDelegate:

libraryUI.delegate = self; 

implementar los siguientes devolución de llamada:

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated { 

    if ([navigationController isKindOfClass:[UIImagePickerController class]] && 
     ((UIImagePickerController *)navigationController).sourceType == UIImagePickerControllerSourceTypePhotoLibrary) { 
     [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO]; 
    } 
} 

se puede especificar cualquier tipo de estilo de barra de estado aquí. En su caso, probablemente tenga que eliminar la verificación sourceType y especificar UIStatusBarStyleBlackTranslucent.

+0

Esta es la respuesta correcta, aunque verá un ligero "salto" de negro translúcido al color de su elección. – Peres

+0

¿Notaste el problema cuando usas UIImagePickerControllerSourceTypePhotoLibrary, abriendo un álbum y luego retrocediendo un poco y cancelando el gesto? – Kukosk

0

Encontré un enfoque más fácil para mí. Solo haga

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 
[self.delegate setNeedsStatusBarAppearanceUpdate]; 

y la barra de estado está oculta (cambie el código si desea que esté visible). Debe llamarse después de seleccionar la imagen de UIImagePickerController.

1

probar este funcionando perfectamente en iOS 8

-(void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated 
{ 
    [[[viewController navigationController] navigationBar] setBarStyle:UIBarStyleBlack]; 
} 
Cuestiones relacionadas