Cómo ocultar la barra de estado de iOS

En mi aplicación de video de iOS, la barra de estado está oculta en algunos controles de vista. Lo he hecho usando el siguiente código.

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 
  • Funciona para iOS 5 e iOS 6, pero no en iOS 7.

  • Intenté con esto en el controlador de vista particular,

P.ej:

 -(BOOL)prefersStatusBarHidden { return YES; } 

Funciona bien, pero no puedo mostrar la barra de estado nuevamente en el controlador de vista principal.

Debe agregar este valor a plist: ” Ver apariencia de la barra de estado basada en el controlador ” y configurarlo a ” NO “.

enter image description here

Agregue lo siguiente a su Info.plist:

 UIStatusBarHidden  UIViewControllerBasedStatusBarAppearance  

Imagen

Agregue la siguiente línea en viewdidload

  [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

y agrega un nuevo método

  - (BOOL)prefersStatusBarHidden { return YES; } 

también cambia el archivo info.plist Ver la apariencia de la barra de estado basada en el controlador “= NO

funciona para mí

En Plist, agregue las siguientes propiedades.

 Status bar is initially hidden = YES View controller-based status bar appearance = NO 

ahora la barra de estado se ocultará.

Prueba este simple método:


C objective:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated] [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated] [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; } 

Rápido:

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None) } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None) } 

Hice lo siguiente y parece funcionar (incluso en iOS 8):

 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { [[UIApplication sharedApplication] setStatusBarHidden:YES]; } } - (BOOL)prefersStatusBarHidden { return YES; } 

Para ocultar la barra de estado en iOS7 necesita 2 líneas de código

  1. en la aplicación: aplicación (UIApplication *) didFinishLaunchingWithOptions: (NSDictionary *) launchOptions write

      [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
  2. en info.plist agrega esto

      View-Controller Based Status Bar Appearance = NO 
  • UIApplication.setStatusBarX está en desuso a partir de iOS9
  • Está obsoleto tener UIViewControllerBasedStatusBarAppearance = NO en su info.plist
  • Entonces deberíamos usar preferredStatusBarX en todos nuestros controladores de vista

Pero se vuelve más interesante cuando hay un UINavigationController involucrado:

  • Si navigationBarHidden = true, se invoca alSitioBarX preferido del UIViewController secundario, dado que el elemento secundario muestra el contenido bajo la barra de estado.
  • Si navigationBarHidden = false, se llama al preferredStatusBarX de UINavigationController, después de todo se muestra el contenido bajo la barra de estado.
  • El DefaultStatusBarStyle predeterminado de UINavigationController usa el valor de UINav.navigationBar.barStyle. .Default = contenido de la barra de estado negra, .Black = contenido de la barra de estado blanca.
  • Por lo tanto, si configura barTintColor en un color personalizado (que probablemente sea), también debe establecer barStyle en .Black para obtener el contenido de la barra de estado en blanco. Establecí barStyle en negro antes de configurar barTintColor, en caso de que barStyle anule BarTintColor.
  • Una alternativa es que puede subclase UINavigationController en lugar de usar el estilo de barra.
  • SIN EMBARGO, si subclase UINavigationController, no obtiene control sobre la barra de estado si navigationBarHidden = true. De alguna manera, UIKit va directo al UIViewController secundario sin preguntar al UINavigationController en esta situación. Pensé que debería ser responsabilidad de UINavigationController preguntarle al niño> encoge de hombros <.
  • Y el UIViewController visualizado de forma modal solo tiene voz en la barra de estado si modalPresentationStyle = .FullScreen.
  • Si tiene un controlador de vista modal de estilo de presentación personalizado y realmente desea que controle la barra de estado, puede establecer modalPresentationCapturesStatusBarAppearance = true.

Para una mejor comprensión agrega algunas fotos con comentarios:

Aplicación antes de cualquier cambio

enter image description here

Se encuentra en su carpeta de Project Navigator llamada Supporting Files y haga clic en el archivo * .plist

enter image description here

Después de que se mostrará diferente configuración de su aplicación. Necesita agregar 2 claves UIStatusBarHidden y UIViewControllerBasedStatusBarAppearance . Puedes hacer esto simplemente haciendo clic en el botón +

enter image description here

Después de presionar + puede elegir una de las teclas, simplemente comience a escribir.

Versión correcta:

enter image description here

Y finalmente la aplicación después de aplicar esto cambia:

enter image description here

Además, puedes encontrar una solución alternativa aquí

Trata eso;

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

En iOS10, todo lo que tenía que hacer es anular la var de prefersStatusBarHidden en mi RootViewController (Swift):

 override var prefersStatusBarHidden: Bool { return true } 

Para ocultar su barra de estado en iOS7:

Abra su archivo plist, luego agregue un agregar una fila llamada “Ver apariencia de la barra de estado basada en el controlador” y establezca su valor en NO .

Aquí está la versión Swift (pre iOS9):

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None) } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None) } 

Esto también funciona (iOS7 +):

 override func prefersStatusBarHidden() -> Bool { return true } 

También necesita llamar:

 setNeedsStatusBarAppearanceUpdate() 

en decir viewDidLoad() .

Tenga en cuenta que si utiliza un controlador SplitView u otro controlador de vista de container , también necesita que devuelva su clase cuando se envía childViewControllerForStatusBarHidden . Una forma de hacerlo es tener una var pública débil para decir statusController , y devolverla en este método reemplazado.

Debe agregar este valor a plist: “Ver apariencia de la barra de estado basada en el controlador” y configurarlo a “NO”.

Pasos para ocultar la barra de estado en iOS
1. abra el archivo AppDelegate.m , agregue application.statusBarHidden en el método didFinishLaunchingWithOptions

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. application.statusBarHidden = YES; return YES; } 
  1. abrir info.plist y establecer

View controller-based status bar appearance establecida NO

iOS 9 en adelante:

Como el método statusBarHidden fue Obsoleto de iOS9 , debe agregar dos valores en plist como se muestra a continuación:

 UIStatusBarHidden  UIViewControllerBasedStatusBarAppearance  

o por interfaz de usuario Por favor, refrésquese debajo de la imagen:

enter image description here

Como statusBarHidden está desaprobado de iOS9 :

@property (readwrite, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden NS_ DEPIECATED _IOS (2_0, 9_0 , “Usar – [UIViewController prefiereStatusBarHidden]”) __TVOS_PROHIBITED;

Desde UIKit > UIApplication.h :

 // Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system. @property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden; - (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2); 

Por lo tanto, debe establecer la View controller-based status bar appearance en NO

Para responder la pregunta de Susitha: use setNeedsStatusBarAppearanceUpdate . Esto hará que una llamada a prefersStatusBarHidden se actualice con el estado de la barra de estado que desee. Prueba esto:

  @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early - (BOOL)prefersStatusBarHidden { return self.isHideStatusBar; } - (void)someMethod { // triggered by an event or user action [self setHideStatusBar:YES]; [self setNeedsStatusBarAppearanceUpdate]; } 

Si desea volver a ver la barra de estado, establezca su propiedad hideStatusBar (o como lo llame) en NO. Llame a preferStatusBarHidden indirectamente haciendo otra llamada a

 [self setNeedsStatusBarAppearanceUpdate] 

Actualización para Swift 3:

Actualice Info.plist con la siguiente información:

View controller-based status bar appearance: NO

Luego, en ViewController u otro lugar:

UIApplication.shared.isStatusBarHidden = true

SOLUCIÓN FIJA PARA SWIFT 3+ (iOS 9, 10)

1- En info.plist establecer debajo de la propiedad

enter image description here

2- Pegar el código debajo del controlador raíz, Para

  private var isStatusBarHidden = true { didSet { setNeedsStatusBarAppearanceUpdate() } } override var prefersStatusBarHidden: Bool { return isStatusBarHidden } 

Puede llamar a isStatusBarHidden = true y isStatusBarHidden = false donde desea hide/show barra de estado