No se puede ocultar la barra de estado en iOS7

267

Acabo de actualizar mi iPhone 5 iOS 7 a cuatro versiones beta. Ahora, cuando ejecuto mi aplicación desde Xcode 5 en este iPhone, la barra de estado no se oculta, aunque debería.

No funciona:

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

No funciona:

[UIApplication sharedApplication].statusBarHidden = YES;

No puedo iniciar sesión en los foros de desarrolladores de Apple

Melih Büyükbayram
fuente
15
No es cierto, mi respuesta involucró Xcode y eso se ha mostrado al público en general. Es demasiado general decir 'si respondes esto, es una violación de NDA' ... deja que los desarrolladores decidan eso por sí mismos ;-)
Jake
posible duplicado de la barra de estado no desaparecerá
ekhumoro
¿Cómo ocultar la barra de estado programáticamente ViewController particular?
bhavik

Respuestas:

558

en el archivo de lista de aplicaciones, agregue una fila, llámelo "Ver la apariencia de la barra de estado basada en el controlador" y configúrelo en NO

Tenga en cuenta que esto simplemente no funciona, si está utilizando UIImagePickerController en la aplicación.

de http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , la solución de mgiroux

Un ejemplo que agrega View Base Controller a su configuración de información en Xcode

satgi
fuente
3
¡Asombroso! ¡Pierdo horas en este! ¡Gracias!
Idan
12
Como referencia, se llama al valor bruto almacenado en el archivo Info.plist real UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield
55
El único problema con este enfoque es que si usa el UIImagePickerController para seleccionar imágenes, forzará a que aparezca la barra de estado una vez más. La única forma segura de prevenir esto es implementar el método prefersStatusBarHidden en cada uno de sus controladores de vista y restablecer el UIViewControllerBasedStatusBarAppearance La configuración del plist es verdadera.
Jason Fuerstenberg
55
¡Realmente no sé por qué Apple ha cambiado esto! Gracias :)
Mohamed Amine
18
También debe establecerlo Status bar is initially hiddenen .
Zorayr
277

Agregue método en su controlador de vista.

- (BOOL)prefersStatusBarHidden {
    return YES;
}
invoodoo
fuente
35
Para todos aquellos que buscan, esta es la forma de hacerlo si desea eliminar dinámicamente la barra de estado en ciertas vistas. ¡Este método funciona independientemente de lo que establezca "Ver apariencia de la barra de estado basada en el controlador" en su lista!
Sr. T
2
+1 b / c Estoy buscando la capacidad de mostrar / ocultar dinámicamente la barra de estado. Sin embargo, el método de configuración de la lista P (ver la publicación de @Satgi arriba) es la mejor manera de mostrar / ocultar la barra de estado a nivel mundial.
JonnyB
Si tiene una galería de fotos en algún lugar, generalmente desea ocultar los controles solo allí, y también puede activarla / desactivarla. Esto no funciona para mí, la función ni siquiera se llama. Tengo en el mismo lugar un preferidoStatusBarStyle y me llaman
Cristi Băluță
44
@ Mr.T En iOS 8, parece que ya no es el caso. Si ha establecido la apariencia de la barra de estado basada en el controlador de vista en NO y devuelve verdadero desde prefersStatusBarHiddenun controlador de vista, no funcionará. La barra de estado todavía aparece.
Isuru
1
@Isuru, ¿por qué te pusiste en NO? Si establece en SÍ, preguntaría a cada controlador de vista en otro caso, por supuesto, no lo haría.
invoodoo
84

En el Plist agregue las siguientes propiedades.

-> Status bar is initially hidden= SÍ

-> View controller-based status bar appearance= NO

Agregue ambos: ahora la barra de estado desaparecerá.

usuario1179912
fuente
Sí, esto también funcionó para mí. Sin establecer la opción "La barra de estado está inicialmente oculta" en SÍ, no funciona como se esperaba. Gracias.
AndrewShmig
53

Para ocultar la barra de estado en una vista única, debe usar:

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

Al principio, esto no funcionó para mí, y luego una sierra en la documentación de este método que dice: // Establecer statusBarHidden no hace nada si su aplicación está utilizando el sistema de barra de estado basado en UIViewController predeterminado.

Esto debe hacerse en el archivo plist, agregando la clave View controller-based status bar appearanceestablecida en NO. Y luego funcionó.

Debora Fortini
fuente
16

Para usar el método de aplicación UIA heredado para ocultar / mostrar la barra de estado, su aplicación debe establecer un valor de lista para iOS 7:

View-Controller Based Status Bar Appearance = NO

Este valor está establecido en SÍ de forma predeterminada. Si lo cambia a NO, puede usar los métodos heredados. Si lo deja configurado en SÍ, aún puede ocultar la barra de estado, pero depende de cada subclase de controlador de vista en su aplicación anular: prefersStatusBarHiddenpara devolver SÍ.

Cada vez que su aplicación necesita cambiar la apariencia o la visibilidad de la barra de estado, y la apariencia de la barra de estado basada en el controlador de vista se establece en SÍ, su controlador de vista más externo debe llamar:

setNeedsStatusBarAppearanceUpdateAnimation

jaredsinclair
fuente
Tuve que presentar una solicitud en Propiedades de destino de iOS personalizadas porque, en general, el plist no funcionaba
xarly
16

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

  1. inaplicación: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsescribir

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

    View-Controller Based Status Bar Appearance = NO
Shaik Riyaz
fuente
2
Solo para limpiar esto, si está poniendo esto adentro didFinishLaunching puede simplemente escribir [application setStatusBarHidden:YES];oapplication.statusBarHidden = YES;
joel.d
puede haber un error tipográfico en la respuesta anterior. "Apariencia de la barra de estado basada en el controlador de vista = NO" no funcionó para mí, pero "Apariencia de la barra de estado basada en el controlador de vista = NO" funcionó.
tmr
11

Hay tantas combinaciones sugeridas para este problema, pero el problema es que iOS 6 y 7 usan diferentes métodos para ocultar la barra de estado. Nunca he tenido éxito al establecer la configuración de plist para habilitar el comportamiento de estilo iOS6 en iOS 7, pero si está creando su aplicación para admitir iOS 6+, debe usar 3 métodos a la vez para asegurarse de que un controlador de vista particular oculte el estado bar:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

Esto debería funcionar independientemente de la configuración de plist.

Nueces saladas
fuente
7

Tuve que hacer los dos cambios a continuación para ocultar la barra de estado:

Agregue este código al controlador de vista donde desea ocultar la barra de estado:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Agregue esto a su archivo .plist (vaya a 'información' en la configuración de su aplicación)

View controller-based status bar appearance --- NO

Luego puede llamar a esta línea para ocultar la barra de estado:

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Peter Y
fuente
6

Simplemente agregue estas 2 líneas en el archivo info.plist. Hará la solución para iOS7 y versiones anteriores tanto.

  • La barra de estado está inicialmente oculta = SÍ
  • Ver apariencia de la barra de estado basada en el controlador = NO

Navegue hasta el proyecto y seleccione Objetivos -> General y vea la casilla de verificación "Estilo de barra de estado ... Ocultar durante el inicio de la aplicación" estará marcada. Esto funcionará

Sid
fuente
6

Prueba este método simple:

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

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Rajesh Loganathan
fuente
4

Lo único que funcionó para mí es agregar lo siguiente en tu lista

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Bartburkhardt
fuente
4

El método más fácil que he encontrado para ocultar la barra de estado en toda la aplicación es mediante la creación de un categorysobre UIViewControllery anulandoprefersStatusBarHidden . De esta manera, no tiene que escribir este método en cada controlador de vista.

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end
Miguel
fuente
la mejor solución real, iOS7, no fakey, genial
Fattie
3
  1. En plist agregar ----

    Ver la apariencia de la barra de estado basada en el controlador --- NO

  2. En cada vista, escriba Control

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

Para el problema de la barra de estado en iOS 7, pero el objetivo debe ser 5.1 y superior para la aplicación

Maulik
fuente
3

Muchas de las respuestas en este hilo funcionan, pero entiendo que si intentas hacer algo dinámico, eventualmente necesitarás llamar:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
corazón oscuro
fuente
3

Pasos para ocultar la barra de estado en iOS 7:

1.Vaya al archivo info.plist de su aplicación.

2.Y establecer, ver la apariencia de la barra de estado basada en el controlador: booleano NO

Espero haber resuelto el problema de la barra de estado .....

chandrika
fuente
3

Para iOS 7 en una vista única, use el método viewWillappear:

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

Para visualizar la barra de estado use:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
Oscar Castellon
fuente
3
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
Thunderbird
fuente
2

En el archivo de lista de información, agregue una fila para la siguiente propiedad

Nombre de propiedad: Ver la apariencia de la barra de estado basada en el controlador

Valor: NO

user842553
fuente
1

Intente agregar el siguiente método al controlador de vista raíz de su aplicación:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
Bhoopi
fuente
1

Intenté todas estas opciones publicadas aquí en mi proyecto y no funcionaron. Pensé que podría tener que ver con el hecho de que había actualizado mi Xcodey luego la aplicación a iOS 7 y algunas configuraciones se habían estropeado en alguna parte. Decidí construir un proyecto completamente nuevo para él y después de una simple configuración: " Status bar is initially hidden = YES" y " View controller-based status bar appearance = NO" como lo han dicho muchos otros, funcionó correctamente (es decir, sin barra de estado).

Entonces, mi consejo si está trabajando en un proyecto que se ha actualizado a iOS 7 desde una versión anterior y ha intentado todas las demás opciones es construir un nuevo proyecto.

usuario1529408
fuente
Utilicé esta misma técnica para confirmar inicialmente que podía ocultar la barra de estado globalmente, para cada pantalla, pero como mi aplicación está bastante "centrada en el tiempo", quería la visualización de la hora para la mayoría de las pantallas. Es solo una pantalla que quería excluir por varias razones. Terminé usando el opuesto de sus parámetros: inicialmente oculto = NO y apariencia de barra de estado basada en VC = SÍ. Luego tuve que poner el método (BOOL) prefiereStatusBarHidden (devolviendo SÍ) en el único VC donde lo quería oculto. Funciona bien Debo agregar que mi aplicación es solo para iOS7 por otros motivos.
bobsmells
1

Para 2019 ...

Para hacer una aplicación sin barras de estado,

Haga clic en info.plist, haga clic con el botón derecho en "Agregar fila".

Agregue estos dos, con esta configuración:

ingrese la descripción de la imagen aquí

Eso es todo al respecto.

Fattie
fuente
0

Para Swift 2.0+ IOS 9

override func prefersStatusBarHidden() -> Bool {
return true
}
Irshad Qureshi
fuente
0

Para ocultar la barra de estado para viewController específico

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Para configurar la barra de estado Oculto para la aplicación:

  • conjunto View controller-based status bar appearanceque NOen .Plist y en application: didFinishLaunchingWithOptions:conjunto: [application setStatusBarHidden:YES];

    Nota: setStatusBarHidden: en desuso

O

  • en Configuración del proyecto -> Pestaña General -> Información de implementación

    Hide Status barCasilla de verificación .

Lal Krishna
fuente
-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
Evan Ische
fuente
La pregunta menciona explícitamente que este enfoque no funciona. Por favor, lea la pregunta cuidadosamente antes de responder.
Borys Verebskyi
Siempre que la apariencia de la barra de estado basada en el controlador de vista esté establecida en NO, es el enfoque más limpio.
Evan Ische
-7

No estoy seguro de por qué "no puede iniciar sesión en los foros de desarrolladores de Apple", pero (sin violar el NDA) también puede ocultar su barra de estado a través de Xcode. Es una configuración general en el destino de su aplicación.ingrese la descripción de la imagen aquí

Jake
fuente
No, funciona como un encanto. los foros han estado activos por un tiempo ahora.
Jake