Después de leer todas las sugerencias y probar algunas cosas, podría hacer que esto funcione para controladores de vista específicos utilizando los siguientes pasos:
Primer paso:
Abra su info.plist e inserte una nueva clave llamada " Ver la apariencia de la barra de estado basada en el controlador " en NO
Segundo paso (solo una explicación, no es necesario implementar esto):
Normalmente ponemos el siguiente código en la aplicación (_: didFinishLaunchingWithOptions :) método del AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
pero eso afecta el statusBarStyle
de todos los ViewControllers.
Entonces, cómo hacer que esto funcione para ViewControllers específicos: paso final:
Abra el archivo viewcontroller donde desea cambiar statusBarStyle
y coloque el siguiente código viewWillAppear()
,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
Además, implemente el viewWillDisappear()
método para ese viewController específico y coloque las siguientes líneas de código,
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Este paso primero cambiará el statusBarStyle
control de vista específico y luego lo volverá a cambiar default
cuando el controlador de vista específico desaparezca. No implementar el viewWillDisappear()
cambiará statusBarStyle
permanentemente al nuevo valor definido deUIStatusBarStyle.LightContent
Status bar is initially hidden = YES
archivo info.plist, "Ver apariencia de la barra de estado basada en el controlador = NO" hará que la barra de estado se oculte.UIStatusBarStyle.Default
usarviewWillDisappear()
, debería usarloviewWillAppear()
para inicializarlo, en lugar deviewDidLoad()
... de lo contrario, si vuelve a esa vista sin tener que volver a cargarla, no verá loStatusBarStyle
que está esperando.UIApplication.shared.statusBarStyle = .lightContent
(A partir del 20 de septiembre de 2019)
Swift 5 , Swift 4.2 , Swift 4
fuente
super.viewWillAppear
si está copiando y pegando este códigoUIApplication.shared.statusBarStyle = .lightContent
resultados en esta advertencia del compilador: Setter para 'statusBarStyle' fue desaprobado en iOS 9.0: Uso - [UIViewController preferredStatusBarStyle]Solución Swift 4.2 con NavigationController
Primer paso:
Abra su info.plist e inserte una nueva clave llamada " Ver la apariencia de la barra de estado basada en el controlador " o
UIViewControllerBasedStatusBarAppearance
en SÍ para permitir que cada VC use su propia propiedad de estado.Segundo paso
En cada VC, anule la propiedad preferredStatusBarStyle de esta manera:
Último paso
Anule la propiedad preferredStatusBarStyle en su clase personalizada NavigationController:
fuente
Seguí este tutorial y funcionó para mí. Sin embargo, no estoy seguro de si hay algunas advertencias.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
enfalse
.AppDelegate.swift
, que contienedidFinishLaunchingWithOptions
, establece el color que deseas.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Actualización de Swift 3 *
UIApplication.shared.statusBarStyle = .lightContent
fuente
UIApplication.sharedApplication().statusBarHidden = false
a AppDelegate.swift didFinishLauchingWithOptionsHay mil millones de respuestas aquí, así que pensé por qué no agregar otra en forma de extensión (con la ayuda de @ Cœur)
Swift 3
Extensión:
Implementación:
fuente
En su Info.plist, debe definir Ver la apariencia de la barra de estado basada en el controlador en cualquier valor.
Si lo define SÍ, debe anular la función preferredStatusBarStyle en cada controlador de vista.
Si lo define NO, puede configurar el estilo en AppDelegate usando
fuente
setStatusBarStyle
fue desaprobado en iOS 9.0fuente
valueForKey("statusBar")
puede no cumplir con las pautas de AppleSwift 3
Esa es la solución para configurar el color de fondo de la barra de estado para un controlador de vista específico.
fuente
SWIFT 2
Pude cambiar con éxito la apariencia del fondo de la barra de estado agregando lo siguiente en mi viewWillAppear:
fuente
Implementar
preferredStatusBarStyle
como usted ha mencionado y llamadaself.setNeedsStatusBarAppearanceUpdate()
enViewDidLoad
y también en conjunto Info.plistUIViewControllerBasedStatusBarAppearance
aYES
(EsYES
por defecto)No está claro por qué no funciona. Necesito verificar el código. Otra sugerencia es ir con el código de trabajo
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
y cambiarlo a predeterminado cuando vea desaparecerviewWillDisappear
.fuente
para swift 3
.plist
AppDelegate.swift
fuente
En mi situación, uso storyboard para organizar mis controladores de vista. Quiero cambiar todo el estilo de la barra de estado.
Puedes ver en la imagen de abajo.
Stars
View Controller es unaCPBaseNavigationController
, yCPBaseNavigationController
es una subclase deUINavigationController
.Intento hacer los siguientes ajustes:
En
AppDelegate.swift
funcdidFinishLaunchingWithOptions
, agreguePero sin efecto.
En StoryBoard, busque la
Base Tab BarController
(imagen de arriba) .seleccioneAttributes Inspector
, cambie elSattus Bar
atributo aLight Content
.so mal, sin efecto.Lo último lo consigo. En mi controlador de navegación personalizado
CPBaseNavigationController
, agregue funcpreferredStatusBarStyle
¡Funciona bien!
Además,
statusBarStyle
en desuso en 9.0, puedes usar-[UIViewController preferredStatusBarStyle]
.fuente
Funciona para la aplicación basada en navegación
fuente
Todo es mucho más fácil en Swift 3.0 Xcode 8
Usando el siguiente código en el archivo Delegado de la aplicación, después de
inserte esto:
fuente
Swift 3
fuente
Swift 4 Para ViewController específico sin navegación ViewController incrustado simplemente agregue esto a su archivo ViewController.
fuente
Otra forma realmente fácil de hacer que esto funcione es simplemente crear una extensión de la clase UINavigationController.
Dado que anular el
preferredStatusBarStyle:
método no funcionará A MENOS QUE lo hagamos dentro de la clase UINavigationController.fuente
Había establecido un color específico (en formato RGB) usando el siguiente código en el
App Delegate
archivo:También debe agregar la siguiente clave en el
Info.plist
archivo:Vea la apariencia de la barra de estado basada en el controlador con un valor booleano establecido en NO
fuente
Puedo sugerirte una forma más simple,
Funcionó para mí en iOS 10.1.
C objetivo
Rápido
Me sorprende que nadie haya señalado esto. De todos modos disfruta :)
fuente
Tuve algunos problemas con este. Realmente no me sentí bien al cambiar globalmente el color de la barra de estado a la vista y luego cambiarlo nuevamente a la vista desapareció como la respuesta aceptada. Lo creas o no, puedes hacer que esto funcione anulando
preferredStatusBarStyle
tu controlador de vista deseado. Después de mucho tiempo, esto es lo que hice para que funcione:info.plist
a SÍ.preferredStatusBarStyle
.modalPresentationCapturesStatusBarAppearance
Sí, eso es.Además, si tiene controladores de vista integrados, como en un controlador de navegación, por ejemplo, le pedirá al controlador de vista superior el estilo de la barra de estado.
childViewControllerForStatusBarStyle
Se supone que anular y pasar el controlador de vista incorporado funciona, pero no lo hizo para mí. Así que acabo de devolver la barra de estado preferida de los controladores de vista incrustados como el estilo de barra de estado preferido. Algo como esto:fuente
UINavigationController
y anular lachildViewControllerForStatusBarStyle
var allí, volviendoself.topViewController
.En Swift 4 o 4.2
Puedes agregar tu vc
y establezca el valor de retorno en
ex:
fuente
(A partir del 10 de junio de 2020)
Swift 5 ( sin editar
.Plist
archivo )Si está utilizando
Storyboard
, vaya alNavigationController
, seleccione elnavigationBar
, haga clic en elAttributes Inspector
, luego cambie elstyle
. si necesitalight content
( barra de estado blanca ) configúrelo todo exceptodefault
digamos establecer estiloblack
Y si lo deseadark content
( barra de estado negra ) configúrelodefault
.El valor predeterminado (
UIBarStyleDefault
) da como resultado laUIStatusBarStyleDefault
barra de estado de primer plano oscuro . YUIBarStyleBlack
le dará unaUIStatusBarStyleLightContent
barra de estado.Programáticamente
Sin barra de navegación ( Editar
.Plist
)agregar
UIViewControllerBasedStatusBarAppearance
/View controller-based status bar appearance
a suinfo.plist
, y establecer el valor estrue
.Override
lapreferredStatusBarStyle
propiedad en su controladorfuente
Actualización de Swift 3.0
fuente
Lo que funcionó conmigo, en el Guión gráfico, vaya al Controlador de navegación, seleccione la barra de navegación, haga clic en el Inspector de atributos, luego cambie el estilo de predeterminado a negro. ¡Eso es!
fuente
SWIFT 4.2 Hola, quería compartir una solución, que funcionó para mí que obtuve de un gran artículo sobre este tema evasivo de Graig Grummitt.
Paso 1 Como otros han mencionado AGREGAR a continuación a su PLIST
Paso 2 en el RootViewcontroller agregar a continuación
Al actualizar cualquiera de las propiedades
statusBarHidden
ovcStatusBarStyle
llamarásetNeedsStatusBarAppearanceUpdate()
y actualizará la barra de estado con los nuevos valores paraprefersStatusBarHidden
opreferredStatusBarStyle
. En mi situación, tuve que actualizar estas propiedades para el contenedor viewcontroller, que era el padre del childviewcontroller visible. Hice esto usando un método simple de delegado.Por supuesto, al instanciar el childViewController (Visible VC) no olvide establecer el MainViewcontroller (Container VC) como su delegado. A veces lo hago. :)
Luego, en childViewController, acabo de llamar al método delegado cuando era necesario para actualizar la barra de estado.
Como se mencionó anteriormente, Graig Grummitt entra en más detalles sobre esta solución y también trabaja con UINavigationControllers. Enlace aquí: El misterioso caso de la barra de estado
fuente
Haga clic en el grupo Archivos de soporte (lado superior izquierdo - nombre de su proyecto). Navega a Información. Haga clic en + en algún lugar entre las listas, como el nombre del paquete a continuación. Y agregue "Ver la apariencia de la barra de estado basada en el controlador" y configúrelo en NO. Luego abra AppDelegate.swift y modifíquelo así:
Eso es.
fuente
Para Xcode 10 puede crear una clase y ponerla antes de su clase viewController, puede llamar a esta clase en todos los controles de vista se necesita una barra de estado de contenido ligero ...
Ahora cambie su clase viewController en:
Y eso es todo...
fuente
Funciona para la navegación basada en un controlador de vista particular en swift4
fuente
ADVERTENCIA
Setter para 'statusBarStyle' quedó en desuso en iOS 9.0: Uso - [UIViewController preferredStatusBarStyle]
entonces mi solución fue la siguiente: hacer una extensión desde el controlador de navegación:
y si tiene un viewController que tendrá otro estilo que el estilo de la aplicación, puede hacer esto
digamos que su estilo de estado de la aplicación es
.default
y desea que esta pantalla sea.lightContent
así, barStyle tomará el.lightContent
valor predeterminado, esto cambiará el estilo de la barra de estado a lightContent y luego asegúrese deviewWillDisappear
cambiar el estilo de la barra de estado nuevamente al estilo de la barra de estado de la aplicación que en nuestro caso es.default
.esto funciona para mi
fuente
Color personalizado para la barra de estado (iOS11 +, Swift4 +)
Si está buscando una solución para cambiar la barra de estado a su color personalizado, esta es la solución de trabajo.
fuente