Cómo ocultar la barra de estado de iOS

219

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

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

  • Lo intenté con este controlador de vista en particular,

P.ej:

-(BOOL)prefersStatusBarHidden { return YES; }

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

Susitha
fuente
1
Si el estilo de la barra de estado se establece en el Guión gráfico, después de cambiar la "Barra de estado basada en el controlador de vista" (a continuación), es posible que el estilo deba establecerse en la lista porque la configuración del controlador de vista ya no se utilizará. stackoverflow.com/questions/18924345/…
Matt
1
Respondí en otra pregunta. Prueba esto. [la forma más fácil de ocultar la barra de estado mediante programación] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru
1
Usé un truco para ello: lo publiqué como pod cocoapods.org/pods/UIViewController+ODStatusBar , espero que sea útil para cualquiera
Alex Nazarsky,
Las respuestas aquí ahora han quedado en desuso. Tuve problemas para encontrar la respuesta correcta para iOS 9 al ocultar la barra de estado PARA SOLO LA PANTALLA DE LANZAMIENTO , por lo que enlazo a continuación para que sea más fácil para otros encontrar cómo hacerlo: stackoverflow.com/questions/34413848/…
Ben

Respuestas:

277

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

ingrese la descripción de la imagen aquí

Rajneesh071
fuente
40
Como referencia, la clave sin procesar esUIViewControllerBasedStatusBarAppearance
William Denniss
1
@ Rajneesh071 ¿Qué necesito hacer si quiero establecer PreferredStatusBarStyle para el trabajo que necesito "View controller-based status bar appearance" set it to "YES".?
Bimawa
¿Qué problema estás enfrentando?
Rajneesh071
parece obsoleto, romperá tu aplicación
Ben
194

Agregue lo siguiente a su Info.plist:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

Imagen

Shekhar Gupta
fuente
Funciona muy bien en Xcode 11.3, iOS 13
Wayne Henderson
113

Añadir la siguiente línea en viewdidload

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

y agregar un nuevo método

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

también cambie el archivo info.plist Vea la apariencia de la barra de estado basada en el controlador "= NO

me funciona

Hitesh Vaghela
fuente
Gracias a este que funciona para mí, pero también necesito agregar la fila de abajo en plist. "Ver la apariencia de la barra de estado basada en el controlador" = NO i, e Agregar la siguiente línea en viewdidload [[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; y agregue un nuevo método: (BOOL) prefiereStatusBarHidden {return YES; } Agregar "Ver la apariencia de la barra de estado basada en el controlador" = NO en el archivo Plist
arenoso
prefersStatusBarHiddenes lo que me sirvió (ya sea con esta solución o con otras similares)
Abdo
34

En el Plist agregue las siguientes propiedades.

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

ahora la barra de estado estará oculta.

Gurumoorthy Arumugam
fuente
8
Las claves sin procesar serían UIStatusBarHidden y UIViewControllerBasedStatusBarAppearance
leolobato
27

Prueba este método simple:


C objetivo:

- (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)
}
Rajesh Loganathan
fuente
1
Esta fue una respuesta maravillosa! También pruébalo con los diversos UIStatusBarAnimations, son geniales.
VedTopkar
No olvides [super viewWillAppear:animated]y[super viewWillDisappear:animated]
SamB
1
Esta solución simple funcionó para mí iOS 10. ¡Manera de ser hombre simple!
coolcool1994
14

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;
}
Smartbot
fuente
12
  • UIApplication.setStatusBarX están en desuso a partir de iOS9
  • Es obsoleto tener UIViewControllerBasedStatusBarAppearance = NO en su info.plist
  • Por lo tanto, 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 llamará al estado preferido de UIViewController, el estado secundario, ya que el niño muestra el contenido en la barra de estado.
  • Si navigationBarHidden = false, se llama a los "StatusBarX" preferidos de UINavigationController, después de todo se muestra el contenido en la barra de estado.
  • El valor predeterminado de UINavigationController preferredStatusBarStyle utiliza el valor de UINav.navigationBar.barStyle. .Default = contenido de la barra de estado en negro, .Black = contenido de la barra de estado en blanco.
  • Entonces, si está configurando barTintColor en un color personalizado (que probablemente sea), también debe establecer barStyle en .Black para obtener el contenido de la barra de estado blanca. Establecería barStyle en negro antes de establecer barTintColor, en caso de que barStyle anule el barTintColor.
  • Una alternativa es que puedes subclasificar UINavigationController en lugar de jugar con el estilo de barra.
  • SIN EMBARGO, si subclasifica UINavigationController, no obtiene control sobre la barra de estado si navigationBarHidden = true. De alguna manera, UIKit va directo al controlador UIViewController secundario sin preguntarle al controlador de navegación UIN en esta situación. Pensé que debería ser responsabilidad del Controlador de UINavigation preguntarle al niño> encoge de hombros <.
  • Y el UIViewController que se muestra modalmente solo tiene algo que decir 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.
Chris
fuente
¿Por qué Apple no puede seguir un consejo? Si no está roto, ¡no lo arregles!
Jargen89
9

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

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

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

     View-Controller Based Status Bar Appearance = NO
    
Shaik Riyaz
fuente
8

Para una mejor comprensión, agregue algunas fotos con comentarios:

Aplicación antes de cualquier cambio

ingrese la descripción de la imagen aquí

Encontrado en su Project Navigatorcarpeta llamada Supporting Filesy haga clic en el archivo * .plist

ingrese la descripción de la imagen aquí

Después de que se muestre la configuración diferente de su aplicación. Necesita agregar 2 teclas UIStatusBarHiddeny UIViewControllerBasedStatusBarAppearance. Puede hacer esto simplemente haciendo clic en el botón +

ingrese la descripción de la imagen aquí

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

Versión correcta:

ingrese la descripción de la imagen aquí

Y finalmente la aplicación después de aplicar estos cambios:

ingrese la descripción de la imagen aquí

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

gbk
fuente
8

En iOS10, todo lo que necesitaba hacer era anular la prefersStatusBarHiddenvar en mi RootViewController(Swift):

override var prefersStatusBarHidden: Bool {
    return true
}
andrewz
fuente
7

Trata eso;

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Kemal Can Kaynak
fuente
Excelente. Yo era capaz de usar esto para ocultar la barra de estado en el controlador de vista que no era necesario en la continuación, en Mostrar una vez que el usuario ha iniciado sesión.
LondonGuy
5

Para ocultar su barra de estado en iOS7:

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

Manju
fuente
5

Aquí está la versión Swift (anterior a 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 usa un controlador SplitView, o algún otro containercontrolador de vista, también necesita que devuelva su clase cuando se envíe childViewControllerForStatusBarHidden. Una forma de hacerlo es tener una var pública débil, por ejemplo statusController, y devolverla en este método anulado.

Esqarrouth
fuente
1
El bloque superior está en desuso en iOS8: use su segundo enfoque. ¡Y gracias! Edité el código para agregar otra llamada obligatoria.
David H
5

iOS 9 en adelante:

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

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

o por interfaz de usuario Por favor, consulte la imagen de abajo:

ingrese la descripción de la imagen aquí

Como statusBarHiddense desuso desde iOS9 :

@property (readwrite, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden NS_ DEPRECATED _IOS (2_0, 9_0 , "Use - [UIViewController prefiereStatusBarHidden]") __TVOS_PROHIBITED;

Ketan P
fuente
5

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

1- En info.plist establecido debajo de la propiedad

ingrese la descripción de la imagen aquí

2- Pega el siguiente código en el controlador raíz, a

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Puedes llamar isStatusBarHidden = truey isStatusBarHidden = falsedonde quieras a la hide/showbarra de estado

MANISH PATHAK
fuente
4

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

calabozo
fuente
4

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 configurar

View controller-based status bar appearance conjunto NO

Ashu
fuente
4

Swift 5

Utilice los siguientes pasos para ocultar la barra de estado de iOS:

  1. Abrir en Info.plist.
  2. Agregue una nueva clave Vea la apariencia y el valor de la barra de estado basada en el controlador en NO .
  3. Agregar nueva clave La barra de estado se oculta inicialmente y el valor se establece en .
  4. Re-compilar proyecto.
  5. La barra de estado debería estar oculta en el teléfono iOS ahora.

Captura de pantalla de configuración final:

Configuraciones finales

Esto está funcionando en Xcode 10.2

Jerry Chong
fuente
2

De 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 View controller-based status bar appearanceen NO

Tony
fuente
2

Para responder la pregunta de Susitha: use setNeedsStatusBarAppearanceUpdate . Esto hará una llamada a prefiereStatusBarHidden para actualizar con el estado deseado de la barra de estado. 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, configure su propiedad hideStatusBar (o como lo llame) en NO. Llame a preferStatusBarHidden indirectamente haciendo otra llamada a

[self setNeedsStatusBarAppearanceUpdate]
smileBot
fuente
1

Actualización para Swift 3:

Actualice Info.plist con la siguiente información:

View controller-based status bar appearance: NO

Luego, en un ViewController o en otro lugar:

UIApplication.shared.isStatusBarHidden = true

Prazgaitis
fuente