Estoy usando Xcode 8.0 beta 4.
En la versión anterior, UIViewController tenía un método para establecer el estilo de la barra de estado
public func preferredStatusBarStyle() -> UIStatusBarStyle
Sin embargo, descubrí que cambió a "Obtener SOLO varaiable" en Swift 3.
public var preferredStatusBarStyle: UIStatusBarStyle { get }
¿Cómo puedo proporcionar el estilo para usar en mi UIViewController?
Respuestas:
[ACTUALIZADO] Para Xcode 10+ y Swift 4.2+
Este es el método preferido para iOS 7 y superior
En su aplicación
Info.plist
, configureView controller-based status bar appearance
enYES
.Anular
preferredStatusBarStyle
( documentos de Apple ) en cada uno de sus controladores de vista. Por ejemplo:Si ha
preferredStatusBarStyle
devuelto un estilo de barra de estado preferido diferente basado en algo que cambia dentro de su controlador de vista (por ejemplo, si la posición de desplazamiento o si una imagen mostrada es oscura), entonces querrá llamarsetNeedsStatusBarAppearanceUpdate()
cuando ese estado cambie.iOS anterior a la versión 7, método obsoleto
Apple ha desaprobado esto , por lo que se eliminará en el futuro. Utilice el método anterior para no tener que volver a escribirlo cuando se lance la próxima versión de iOS.
Si su aplicación será compatible con la de su aplicación
Info.plist
, configureView controller-based status bar appearance
enNO
.En
appDelegate.swift
ladidFinishLaunchingWithOptions
función, agregue:Para el controlador de navegación
Si utiliza un controlador de navegación y desea que el estilo de barra de estado preferido de cada controlador de vista que se utilizará y establece
View controller-based status bar appearance
queYES
en sus aplicaciones deinfo.plist
fuente
Última actualización (Xcode 10+ / Swift 4.2+)
Este artículo se deja intacto para cualquiera que esté dispuesto a comprender la lógica detrás de los diferentes enfoques que estuvieron presentes durante los últimos años. Mientras tanto, a partir de Xcode 10, el primer enfoque de Swift 4.2 está en desuso y ya no es compatible (es decir , no tendrá efecto si intenta utilizarlo). Todavía se refiere a su información para comprender mejor el razonamiento detrás de la
Plist.info
práctica de la bandera y la personalización.Aclaraciones importantes
Es muy importante comprender dos enfoques para personalizar la apariencia de la barra de estado. Son diferentes y no deben mezclarse.
Primer enfoque: un color para toda la aplicación (DEPRECADO desde iOS7)
En info.plist encuentras o creas una clave llamada
View controller-based status bar appearance
y póngalo en NO .
¿Que hace? Básicamente, establece una configuración que dice que en su aplicación, la apariencia de la barra de estado no está definida individualmente por cada controlador de vista . Esto es súper importante de entender. Esto significa que tiene una configuración uniforme para toda la aplicación, para todas las pantallas. Hay dos configuraciones:
default
que es texto negro sobre fondo blanco olightContent
texto blanco sobre fondo negro.Para configurar uno de estos ( una configuración para todas las pantallas ):
De esta manera, no necesitará restablecer esta configuración en cada controlador de vista. Sin embargo, siempre puede recurrir a este método para cambiar voluntariamente la apariencia.
Segundo enfoque: color individual para cada controlador de vista
Esto es lo contrario. Para que funcione, vaya a info.plist y configure
View controller-based status bar appearance
a SÍ
De esta manera, cada vez que se abre un nuevo controlador de vista, el estilo de la barra de estado se configura individualmente si inserta esta implementación en cada
UIViewController
instancia que necesita:Tiene lo mismo que en el primero, configure el estilo oscuro o claro para la barra de estado, individual para cada controlador de vista.
UIKit obtiene esta propiedad en dos escenarios:
setNeedsStatusBarAppearanceUpdate()
en el código.En este último caso, puede manipular la apariencia de la barra de estado con el siguiente código:
Entonces, cuando llames
toggleAppearance()
, se activará el cambio de estilo de la barra de estado.Tercer enfoque: ¡Hack!
Hay un truco que permite acceder a la barra de estado directamente:
¿Por qué hackear? Si necesita un color de barra de estado que no sea blanco o negro, use una API no documentada. Obtiene el
statusBar
objeto usando KVC y establece su color de fondo. El objeto que se obtiene de esta manera esUIStatusBar
, que se derivaUIView
y, por lo tanto, naturalmente es compatible con labackgroundColor
propiedad. Esta es una forma sucia, no legal, pero hasta ahora es la única forma de configurar el color personalizado para la barra de estado (sin tener en cuenta elUINavigationBar
enfoque, lo que permite personalizar la apariencia de la barra de estado + barra de estado por completo). Es muy posible que su aplicación sea rechazada. Pero tal vez tengas suerte. Y si es así, en ciertas circunstancias complejas (como la jerarquía de controladores de vista y navegación secundarios anidados), esta puede ser la única forma, o al menos la menos problemática, de personalizar la apariencia de la barra de estado (por ejemplo, para que sea transparente)Xcode 10+, Swift 4.2
Ya no hay alternativas: el desarrollador debe permitir que cada controlador de vista defina la apariencia de la barra de estado, estableciendo el indicador en SÍ (u omitiendo esta acción, porque es SÍ de forma predeterminada) y siguiendo las instrucciones anteriores.
Prima
Solución basada en pirateo que puede (aunque no se recomienda) usar en circunstancias complejas para cambiar voluntariamente la apariencia de la barra de estado en cualquier etapa. En cuanto al color, el siguiente método de extensión hace exactamente lo que podría haber hecho con un enfoque regular. Puedes ajustarlo a tus necesidades.
fuente
Podría intentar anular el valor devuelto, en lugar de configurarlo. El método se declara como {get}, así que solo proporcione un getter:
Si configura esto condicionalmente, deberá llamar
setNeedsStatusBarAppearanceUpdate()
para animar el cambio cuando esté listofuente
prefersStatusBarHidden
algunas de sus vistas. Si vas conUIApplication.shared.statusBarStyle
eso, te quedarás atrapado.Swift 3 y 4, iOS 10 y 11, Xcode 9 y 10
Para mí, este método no funciona:
cuando solía ver cada controlador de vista, pero esto funcionó:
En el archivo info.list, agregue fila:
View controller-based status bar appearance
y configúrelo enNO
Siguiente en appdelegate:
fuente
Si desea cambiar el
statusBar
color de 's a blanco, para todas las vistas contenidas en aUINavigationController
, agregue esto dentroAppDelegate
:Este código:
no funciona para
UIViewControllers
contenido en aUINavigationController
, porque el compilador busca el contenidostatusBarStyle
delUINavigationController
, nostatusBarStyle
elViewControllers
contenido del contenido.¡Espero que esto ayude a aquellos que no han tenido éxito con la respuesta aceptada!
fuente
Si desea cambiar el estilo de la barra de estado en cualquier momento después de que aparezca la vista, puede usar esto:
En el archivo info.list add row: vea la apariencia de la barra de estado basada en el controlador y configúrela en YES
fuente
If you call this method within an animation block, the changes are animated along with the rest of the animation block.
Xcode 10 o posterior
Probado en Swift 5
No se requiere código, solo siga los pasos a continuación.
No olvide los cambios de info.plist
Ejecute su proyecto y verifíquelo.
Mi proyecto en swift 5 y Xcode 10.2 y 11.0
fuente
Debe agregar la siguiente clave en su archivo Info.plist:
View controller-based status bar appearance
con valor booleano establecido enNO
En su clase appdelegate, en
didFinishLaunchingWithOptions
método antes de regresar.cambio
backgroundColor
ystatusBarStyle
según requerimiento.fuente
También puedes hacer esto en storyboard
Tendrá que hacer esto para cada controlador de navegación que tenga. Sin embargo, cualquier vista bajo ese controlador de navegación cambiará el estilo / color de todas las barras de estado de la vista al que acaba de seleccionar. Encuentro esta opción mejor porque puede ver sus resultados al instante y no tiene que agregar líneas de código adicionales en cada controlador de vista.
(Hecho con Xcode 8.3.3 en un proyecto todo Swift)
fuente
View controller-based status bar appearance = NO
y tener que usar solo un estilo claro u oscuro en toda la aplicación. Es una pena que esta forma "sin código" funcione solo en el controlador de navegación, Apple debería considerar agregar otro campo para configurar esta opción dentro de cualquier instancia del controlador de vista.Para las personas que buscan cambiar la barra de estado para todos los controladores de vista en: iOS 11, la solución Swfit 4/5 es bastante fácil.
1) Info.plist add:
2) Lado izquierdo del proyecto XCode slect> Objetivos > Seleccione su proyecto> En general> Información de implementación> Seleccionar estilo de barra de estado: claro
Si desea cambiar la barra de estado solo para un controlador de vista , en viewDidLoad agregue:
2.1 ) Lista de información
2.2 )
Objective-C (o reaccionar nativo) cambiando de delegado de aplicaciones:
1) Info.plist add:
2) AppDelegate -> didFinishLaunchingWithOptions
Cambiar la barra de estado no funciona al intentar hacer push (controladores de navegación), solo al presentar modalmente los controladores de vista.
fuente
El primer paso debe agregar una fila con clave:
View controller-based status bar appearance
y valorNO
alInfo.plist
archivo. Después de eso, agregue 2 funciones en su controlador para especificar solo que ese controlador tendrá efecto:fuente
Swift 3
En Info.plist agregue una fila llamada "Ver la apariencia de la barra de estado basada en el controlador" y establezca su valor en
No
.fuente
Parece que hay un pequeño problema sobre el color del texto de la barra de estado cuando se trata de barras de navegación.
Si desea establecer la apariencia de la barra de estado basada en el controlador Ver entrada .plist
YES
, a veces no funcionará cuando tenga una barra de navegación de color.Por ejemplo:
y
override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}
El código anterior no funcionará incluso si ha configurado lo siguiente en AppDelegate:
UIApplication.shared.statusBarStyle = .lightContent
Para aquellos que todavía luchan, aparentemente juzga de alguna manera si la barra de estado debe ser clara u oscura según los estilos en la barra de navegación. Entonces, logré arreglar esto agregando la siguiente línea en viewWillAppear:
nav?.barStyle = UIBarStyle.black
Cuando el estilo de la barra es negro, escucha su variable anulada. Espero que esto ayude a alguien :)
fuente
Para agregar a la gran respuesta por @Krunal https://stackoverflow.com/a/49552326/4697535
En caso de que esté utilizando a
UINavigationController
, elpreferredStatusBarStyle
no tendrá ningún efecto en elUIViewController
.Xcode 10 y Swift 4.
Establecer una costumbre
UINavigationController
Ejemplo:
Use una extensión para una solución de nivel de aplicación:
fuente
Xcode 8.3.1, Swift 3.1
Cree una nueva entrada en info.plist "Ver la apariencia de la barra de estado basada en el controlador" configúrela en "NO".
Abra AppDelegate.swift y agregue estas líneas en el método "didFinishLaunchingWithOptions":
application.statusBarStyle = .lightContent
fuente
Swift 4+
para el texto blanco de la barra de estado:
fuente
Aquí están las instrucciones / instrucciones de Apple sobre el cambio de estilo de la barra de estado.
Si desea establecer el estilo barra de estado, nivel de aplicación a continuación, establece
UIViewControllerBasedStatusBarAppearance
queNO
en su.plist
archivo. Y en suappdelegate
>didFinishLaunchingWithOptions
add following ine (programáticamente puede hacerlo desde el delegado de la aplicación).C objetivo
Rápido
si desea establecer el estilo de la barra de estado, en el nivel de vista del controlador, siga estos pasos:
UIViewControllerBasedStatusBarAppearance
aYES
en el.plist
archivo, si necesita establecer el estilo de la barra de estado solo en el nivel UIViewController.En la función viewDidLoad add -
setNeedsStatusBarAppearanceUpdate
anule preferredStatusBarStyle en su controlador de vista.
C objetivo
Rápido
Establezca el valor de .plist según el nivel de configuración del estilo de la barra de estado.
fuente
Swift 4.0 Utilice este código en "didFinishLaunchingWithOptions launchOptions:" clase Appdelegate
fuente
iOS 11.2
fuente
Esto funciono para mi
Establezca la
View controller-based status bar
apariencia en NO en plist y luego enUIViewController
viewDidAppear
acaba de agregar la siguiente líneafuente
rápido 3
si Ver la apariencia de la barra de estado basada en el controlador = SÍ en Info.plist
luego use esta extensión para todos los NavigationController
si no hay UINavigationController y solo tiene UIViewController, use el código A continuación:
fuente
Swift 5
Para agregar más detalles para la respuesta de PRAVEEN en https://stackoverflow.com/a/40066798/2082851 , me gustaría proporcionar mi implementación. Admite la flexibilidad para personalizar la barra de estado de cada controlador.
En general, crearemos uno
BaseViewController
que maneje lastatusBarStyle
propiedad en todos los casos. Cuando cree un nuevo controlador, hágalo como una subclase de este controlador base.Siempre que desee cambiar la apariencia del estado, solo necesita actualizar esta propiedad. El estilo de la barra de estado se actualizará inmediatamente.
Implementación
Manifestación
2)
UINavigationController
Para
UINavigationController
, es un caso especial, que puede seguir cualquiera de las soluciones:Solución A: anulación con envío de mensaje
Dado que UINavigationController es
NSObject
y hereda deObjectiveC
, sus métodos sonmessage dispatch
y puede anularlos.Solución B: crear
UINavigationController
subclaseSi ya tiene una costumbre
UINavigationController
(que generalmente necesita controlar más requisitos), esta es la mejor solución para usted.fuente
Puede usar una propiedad bool llamada "shouldStatusBarDark" para alternar el color de la barra de estado. Y también puede actualizar su valor para cambiar el color de la barra de estado cuando se desplaza.
fuente
La mayoría de estas respuestas son repetitivas, pero ninguna de ellas aborda la pantalla de inicio cuando uso un fondo oscuro.
Resolví esto con lo siguiente en mi
info.plist
que produjo una barra de estado de estilo claro.fuente
Si está recibiendo la advertencia: Setter de 'statusBarStyle' fue desaprobado en iOS 9.0: Use - [UIViewController preferredStatusBarStyle] , luego para configurar la barra de estado en claro u oscuro use el siguiente código:
Esto no hará que su navBar cambie, simplemente indica el estilo y, por lo tanto, cambia la barra de estado en consecuencia.
NÓTESE BIEN. Debe asegurarse de configurar su info.plist.
fuente
Si está utilizando una presentación modal, debe configurar:
fuente
En iOS 13, puede usar la
.darkContent
UIStatusBarStyle
propiedad para mostrar la barra de estado oscurafuente
Si aún no puede cambiar la base de estilo de la barra de estado en el método
Puede intentar usar este método:
fuente
Para el objetivo C simplemente agregue esta línea en su aplicación didFinishLaunch method
fuente
usando WebkitView
Swift 9.3 iOS 11.3
fuente