Me gustaría mostrar y ocultar la barra de Estado en algunos controladores. Se puede hacer esto o es más de un general de la aplicación de configuración.

He visto muchos posts/preguntas sobre el plist de actualización:

View controller-based status bar appearance - NO

Si esto se termine lo que el control se da entonces?

Estoy mirando para mostrar la barra de estado en la pantalla principal de la aplicación. Pero, por ejemplo, por un lado (diapositiva) menú me gustaría que no se muestran, es esto posible? Este puede ser cambiado en IB o código?

EDITAR —
Estoy usando un https://github.com/edgecase/ECSlidingViewController aplicación.

El controlador principal (que muestra la primera página) debe mostrar la barra de Estado, pero el menú de la izquierda el controlador cuando se desliza no debe.

Creo que el problema es que ambos se sientan dentro de la misma raíz (controlador deslizante de controlador de vista) por lo que es difícil de completar.

Ideal si la pantalla de inicio (página principal) podría tomar la barra de estado cuando las diapositivas que sería mejor.

InformationsquelleAutor StuartM | 2013-09-20

5 Comentarios

  1. 128

    Plist configuración "View controller-based status bar appearance" sólo controla si una per-controlador de base debe ser aplicado en iOS 7.

    Si establece este plist opción a NO, usted tiene que manualmente activar y desactivar la barra de estado como (como era hasta iOS 6):

    [[UIApplication sharedApplication] setStatusBarHidden:YES]

    Si establece este plist opción SÍ, usted puede agregar este método a cada uno de sus viewControllers para configurar la barra de estado en forma independiente para cada controlador (que es el esp. bueno si usted tiene un smart subclase sistema de viewControllers)

    - (BOOL)prefersStatusBarHidden {
        return YES;
    }

    Edición:

    existen dos métodos que son de interés si usted está optando en el nuevo viewController basado en la barra de estado en la comparecencia

    Forzar una actualización de la barra de estado con:

    [self setNeedsStatusBarAppearanceUpdate]

    Si se han anidado los controladores (por ejemplo, un contentViewController en un TabBarController subclase, su TabBarController subclase podría pedir es actual childViewController y adelante esta configuración. Creo que en tu caso concreto que podría ser de uso:

    - (UIViewController *)childViewControllerForStatusBarHidden {
         return _myChildViewController;
    }
    - (UIViewController *)childViewControllerForStatusBarStyle {
         return _myOtherViewController;
    }
    • Gracias, creo que el problema es con el uso de la corredera de controlador de vista. Como la aplicación utiliza una raíz de vista controlador, a continuación, carga un controlador de vista en el medio, y una en la izquierda. Esto significa que ambos están controlados por la raíz de controlador de vista, por tanto, la configuración de la barra de estado para mostrar/ocultar sucede en ambos.
    • Es claramente un problema de la ECSSlidingViewController está utilizando. Pero usted sabe, que usted no necesita ningún tercero deslizamiento de vista de los controladores más en iOS7? Sin embargo, si se aplica correctamente, se debe trabajar por la configuración de la información.plist declaración a NO y el uso de -prefersStatusBarHidden.
    • A la derecha, estamos apoyando a IOS6 demasiado, aunque por lo que no se puede utilizar el ios7 funcionalidad. Supongo que esto es algo que no puedo cambiar ni una solución demasiado. Como no hay realmente una raíz de controlador de vista de la celebración de dos controladores que no puedo tener alternativa. gracias
    • No he mirado el ECSSliding código, pero hasta ahora sólo he visto horrible soluciones a este tipo de nicetohave característica de diseño. Viola muchos de programación de los principios de diseño a tener dos controladores en una vista simplemente para tener un agradable interactivo efecto de transición. Si se tratara de mi aplicación, me cortaría esta característica para los usuarios de iOS 6 (y el uso normal no interctive UINavigationController leftToRight de transición), debido a que iOS 7 tiene un nuevo y hermoso interactivo de transición que hace exactamente lo que usted está buscando: Ver la sesión 218 «Transiciones Personalizadas Utilizando la Vista de los Controladores» de la WWDC videos.
    • Es de todos modos el uso de una función para IOS7 y el otro para IOS6? I. e. el ECsldiing que estaba trabajando bien para IOS6 y, a continuación, el nuevo IOS7, me imagino que sería demasiado trabajo para intentar imp algo como que
    • Sí, en el código, puede comprobar la versión actual con la que oficialmente se recomienda la revisión de la versión: si(piso(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { }
    • He editado la respuesta y añadió probablemente útil información.
    • Quiero Implementar lo mismo en mi proyecto, así que, Como se dijo en el anterior 2do comentario «no se necesita ningún tercero deslizamiento de vista de los controladores más en iOS7» ¿hay cualquier defecto de control de menú de deslizamiento en iOS 7? por favor me dicen.
    • Depende del efecto que se desee lograr. Tal vez usted puede hacerlo con un UIViewControllerInteractiveTransitioning. No he trabajado mucho con él, aunque, tal vez usted debe abrir una pregunta por separado para esto.
    • Muchas gracias. Gran explicación.
    • Puede comprobar este código github.com/Rogaven/UIViewController-ODStatusBar
    • existe de todos modos para ocultar la barra de estado de ios 9 ?

  2. 14

    En iOS 7 y versiones posteriores, acaba de implementar -prefersStatusBarHidden, por ejemplo, en un UIViewController que debe ocultar la barra de estado:

    - (BOOL)prefersStatusBarHidden {
        return YES;
    }

    El valor predeterminado es NO.

  3. 14

    Swift 3:

    override var prefersStatusBarHidden: Bool {
        return true
    }
    • get {} no es necesario, usted puede devolver true a la vez!
  4. 4

    También puede mostrar/ocultar la barra de estado en una animación bloque, poniendo de animación de código dentro de didSet propiedad de la variable que indica si se debe mostrar u ocultar. Cuando se establece un nuevo valor para el statusBarHidden Bool, automáticamente se activa la animación de actualización de la barra de estado a través de la duración que usted ha elegido.

    ///Swift 3 syntax: 
    
    var statusBarHidden: Bool = true {
        didSet {
            UIView.animate(withDuration: 0.5) { () -> Void in
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }
    
    override var prefersStatusBarHidden: Bool {
        return statusBarHidden
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)        
        statusBarHidden = false //show statusBar, animated, by triggering didSet block
    }
    • por fin! esto es exactamente lo que yo estaba buscando. gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here