ios - ¿Cómo ocultar la barra de estado en UIImagepickercontroller?
objective-c iphone (14)
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 se oculte 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
?
Creo que resolví esto de una manera bastante simple sin subclasificar y usar plist. solo se esconde para UIImagePickerController.
Este ejemplo es solo para mostrar la imagen de la foto, pero imagino que puede aplicarla de la misma manera que en cualquier lugar con uiimagepickercontroller
- (void)showGallary
{
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}];
imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[CATransaction commit];
}
En mi caso tuve que usar presentViewController para mostrar UIImagePickerViewController (iOS7).
1- Establezca la apariencia de la barra de estado basada en controlador en NO en .plist 2- Cree una categoría para UIImagePickerController y en viewDidLayoutSubviews:
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
3- Añadidos los dos métodos siguientes a la categoría:
- (BOOL)prefersStatusBarHidden{
return YES;
}
- (UIViewController *)childViewControllerForStatusBarHidden{
return nil;
}
Espero que esto sea de ayuda.
Esto funcionó bien para mi:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
Edición: A partir de hoy, acabo de descubrir que en su lista de información, si simplemente copia y pega la vista de la barra de estado basada en el controlador, no funcionará ... tiene que presionar Entrar en una propiedad y desplazarse hasta el último de ellos, por lo que tendrá que autocompletar para: ver la apariencia de la barra de estado basada en el controlador y un booleano, sin. Lo intenté varias veces pero no funciona simplemente copiando. Que tengas un buen día.
La solución que encontré para las aplicaciones se basa en "Ver la apariencia de la barra de estado basada en el controlador" establecida en SÍ
Yo agregué Categoría:
//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
El método childViewControllerForStatusBarHidden se usa raramente, pero el selector de imagen lo usa, por eso puede causar algunos problemas
También puede implementar el singleton UIViewController, con un método que devuelve SÍ o NO, según su propiedad. Luego, su controlador de vista implementa childViewControllerForStatusBarHidden devolviendo el singleton anterior. Cambiar la propiedad de singleton cambia automáticamente la barra de estado en la aplicación. También hay un método doble childViewControllerForStatusBarStyle
Sin embargo, para 2014, iOS8, consulte este https://.com/a/18960308/294884
Por favor, intente esto.
• Configuración de un delegado para el UIImagePickerController
• ocultar la barra de estado en el control de navegación del delegado: didShowViewController: animated: function.
P.EJ:
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
Prueba esto
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
También revise esta discussion .
Pruebe mi respuesta publicada aquí si desea seguir utilizando la ViewController-Based Status Bar Appearance
.
Puedes hacerlo con una categoría:
@interface UIImagePickerController (HideStatusBar)
@end
@implementation UIImagePickerController (HideStatusBar)
- (BOOL)prefersStatusBarHidden
{
return YES;
}
- (UIViewController *)childViewControllerForStatusBarHidden
{
return nil;
}
@end
Quería tener la barra de estado oculta todo el tiempo, abriendo el selector de imágenes se muestra. Para ocultarlo de nuevo lo siguiente me funcionó 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
Si desea deshabilitar la barra de estado de plist, intente esto:
- La barra de estado está inicialmente oculta: SÍ
- Ver el aspecto de la barra de estado basada en el controlador: NO
Esto es necesario para iOS 7, funciona para mí. No sé si hay otras técnicas para hacer esto en iOS7. Establezca estas dos etiquetas en su info.plist.
Cada vez que aparezca su controlador de visualización, en viewDidLoad o cuando finalice el controlador del selector de imágenes, use esto:
- (void) imagePickerController:(UIImagePickerController *)picker1 didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
.
.
.
.
}
Tuve un problema en el que en iOS7 no se ocultaba mi barra de estado. Lo escondí programáticamente y aún se mostraba en iOS7, pero cuando se ejecutaba en iOS6, la barra de estado se ocultaba adecuadamente. Tienes que ir al plist 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 en particular, entonces configure la barra de estado como SÍ oculta cuando se cargue el VC. Cuando el VC desaparecerá, configurará la barra de estado oculta de nuevo en 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é oculto y se mostrará en la siguiente Vista:
-(void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
setStatusBarHidden:withAnimation:
si quieres una animación suave
Usé la respuesta de Silvertaurus arriba, pero con una pequeña modificación al método prefersStatusBarHidden
que pensé fue muy útil:
//UIImagePickerController+StatusBarHidden.h
#import <UIKit/UIKit.h>
@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 hacia arriba para el selector de imágenes cuando no se muestra la cámara.
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
El childViewControllerForStatusBarHidden es la clave!
-(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.