color - white status bar swift 4
Cambiar el color de la barra de estado para ViewControllers específicos utilizando Swift en iOS8 (24)
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
Usar el código anterior en cualquier ViewController para establecer el color de la barra de estado en blanco para un controlador de vista específico no funciona en iOS8 para mí . ¿Alguna sugerencia? Al utilizar el método UIApplication.sharedApplication, el color cambia después de los cambios necesarios en Info.plist para toda la aplicación.
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
¿Cómo puedo hacer cambios en el color de la barra de estado para algunos ViewControllers necesarios y específicos ?
Actualización de Swift 3.0
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
Después de leer todas las sugerencias y probar algunas cosas, podría hacer que funcione para controladores de vista específicos siguiendo los siguientes pasos:
Primer paso:
Abra su info.plist e inserte una nueva clave llamada " Ver apariencia de la barra de estado basada en el controlador " a NO
Segundo paso (solo una explicación, no es necesario implementar esto):
Normalmente ponemos el siguiente código en el método de la aplicación (_: didFinishLaunchingWithOptions :) de AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
pero eso afecta al 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 el statusBarStyle
y coloque el siguiente código en viewWillAppear()
,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
Además, implemente el método viewWillDisappear()
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
para el viewcontroller específico y luego lo cambiará a los valores default
cuando desaparece el viewcontroller específico. La no implementación de viewWillDisappear()
cambiará el statusBarStyle
permanentemente al nuevo valor definido de UIStatusBarStyle.LightContent
En mi situación, utilizo el guión gráfico para organizar mis controles de vista. Quiero cambiar todo el estilo de la barra de estado.
Puedes ver en la imagen a continuación.
Stars
View Controller es un CPBaseNavigationController
, y CPBaseNavigationController
es la subclase de UINavigationController
.
Intento hacer los siguientes setps:
En
AppDelegate.swift
funcdidFinishLaunchingWithOptions
, agregue//change status bar color UIApplication.sharedApplication().statusBarHidden = false UIApplication.sharedApplication().statusBarStyle = .LightContent
pero no tiene efecto.
En StoryBoard, encuentre el
Base Tab BarController
(imagen en la parte superior). SeleccioneAttributes Inspector
, cambie elSattus Bar
aLight Content
Tan mal, sin efecto.
La última vez que lo entiendo. En mi controlador de navegación personalizado
CPBaseNavigationController
, agrego funcpreferredStatusBarStyle
override func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent }
¡Funciona bien!
Además, statusBarStyle
obsoleto en 9.0, puede usar -[UIViewController preferredStatusBarStyle]
.
En su Info.plist necesita definir Ver la apariencia de la barra de estado basada en el controlador a cualquier valor.
Si lo define SÍ, entonces debe anular la función preferredStatusBarStyle en cada controlador de vista.
Si lo define NO, puede establecer el estilo en AppDelegate usando
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Establecí el color específico (en formato RGB) usando el código siguiente en el archivo App Delegate
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
. . .
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .LightContent
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
}
. . .
}
También necesita agregar la siguiente clave en el archivo Info.plist
:
Ver la apariencia de la barra de estado basada en el controlador con el valor booleano establecido en NO
Funciona para aplicaciones basadas en navegación
var addStatusBar = UIView()
addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
self.window?.rootViewController?.view .addSubview(addStatusBar)
Haga clic en el grupo Archivos auxiliares (arriba a la izquierda - nombre de su proyecto). Navega a Info. Haga clic en + en algún lugar entre las listas, como debajo del nombre del paquete. Y agregue "Ver la apariencia de la barra de estado basada en el controlador" y configúrelo en NO. A continuación, abra AppDelegate.swift y modifique de esta manera:
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
return true
}
Eso es.
Hay 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:
extension UIApplication {
class var statusBarBackgroundColor: UIColor? {
get {
return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
} set {
(shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
}
}
}
Implementación:
UIApplication.statusBarBackgroundColor = .blue
Implemente preferredStatusBarStyle
como mencionó y llame a self.setNeedsStatusBarAppearanceUpdate()
en ViewDidLoad
y también en Info.plist establezca UIViewControllerBasedStatusBarAppearance
en YES
(es YES
de manera predeterminada)
No está claro por qué no funciona. Necesito verificar el código. Otra sugerencia es ir con el código de trabajo en viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
y cambiar esto a la predeterminada cuando vea get desapareció viewWillDisappear
.
Literalmente me metí en este mismo tema. Me llevó más de 4 horas averiguarlo. Intenté todas las respuestas dadas aquí y lo mejor que pude hacer fue poner el título en blanco en la barra de estado. Pero los otros bits, como la barra de la batería y otros, seguían siendo negros sin importar lo que hiciera: con respecto a la aplicación de todas las soluciones proporcionadas en esta pregunta. Así que decidí volver sobre mis pasos y me enteré de que había descargado una dependencia de CocoaPod que estaba alterando las funcionalidades normales de Xcode y los códigos para cambiar los colores. Para mí, era dependencia de "ChameleonFramework". Así que le aconsejo que compruebe las dependencias que ha instalado desde CocoaPods eliminando las más recientes si ha aplicado todas las soluciones y no está trabajando para usted.
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 y luego cambie el estilo de predeterminado a negro. ¡Eso es!
Puedo sugerirte una forma más simple,
- Solo llame a setNeedsStatusBarAppearanceUpdate en viewDidLoad como dice Apple docs,
Llame a este método si los atributos de la barra de estado de la controladora de vista, como el estado o estilo oculto / oculto, cambian. Si llama a este método dentro de un bloque de animación, los cambios se animan junto con el resto del bloque de animación.
- Implemente preferredStatusBarStyle devolviendo su tipo preferido.
Me funcionó en iOS 10.1.
C objetivo
[self setNeedsStatusBarAppearanceUpdate];
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
Rápido
setNeedsStatusBarAppearanceUpdate()
var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Me sorprende que nadie lo haya señalado. De todos modos, disfruta :)
Seguí este tutorial y funcionó para mí. Sin embargo, no estoy seguro de si hay alguna advertencia.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
- Abra su info.plist y establezca
UIViewControllerBasedStatusBarAppearance
enfalse
. - En la primera función en
AppDelegate.swift
, que contienedidFinishLaunchingWithOptions
, establezca el color que desea.
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Actualización de Swift 3 *
UIApplication.shared.statusBarStyle = .lightContent
Swift 4.0 Utilice este código en "didFinishLaunchingWithOptions launchOptions:" Clase Appdelegate
UIApplication.shared.statusBarStyle = .lightContent let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView if statusBar.responds(to: #selector(setter: UIView.backgroundColor)){ statusBar.backgroundColor = UIColor.black }
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
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
inserta esto:
UINavigationBar.appearance().barStyle = .black
UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)
Tuve algunos problemas con este. Realmente no me sentí bien con el cambio global del color de la barra de estado a la vista y luego volver a cambiar de vista desapareció como la respuesta aceptada. Lo creas o no, puedes hacer que esto funcione anulando preferredStatusBarStyle
en tu controlador de vista deseado. Después de mucho tiempo esto es lo que hice para que funcione:
- Cambie la apariencia de la barra de estado basada en el controlador de View en su
info.plist
a YES. - Ahora, cualquier controlador de vista de pantalla completa puede cambiar el estilo de la barra de estado anulando
preferredStatusBarStyle
. - Especifico la pantalla completa porque esto no funcionará para los controladores de vista modal (no de pantalla completa), no sin configurar
modalPresentationCapturesStatusBarAppearance
es Sí que sí lo es. Además, si tiene controles de vista incrustados, como en un controlador de navegación, por ejemplo, le pedirá al controlador de vista superior que muestre el estilo de la barra de estado. Reemplazar
childViewControllerForStatusBarStyle
y aprobar el controlador de vista incrustado debe funcionar, pero no funcionó. Así que acabo de devolver la barra de estado preferida de los controles de vista incrustados como el estilo preferido de la barra de estado. Algo como esto:override var preferredStatusBarStyle: UIStatusBarStyle { if let topViewController = viewControllers.last { return topViewController.preferredStatusBarStyle } return .default }
para veloz 3
.plist
View controller-based status bar appearance = NO
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Custom statubar
UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = .lightContent
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.backgroundColor = UIColor.gray
return true
}
(A partir del 13 de julio de 2017)
Swift 3 y Swift 3.1
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIApplication.shared.statusBarStyle = .lightContent
}
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
SWIFT 2
Pude cambiar con éxito la apariencia del fondo de la barra de estado agregando lo siguiente en mi vista Mostrar:
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
statusBar.backgroundColor = .redColor()
}
Swift 3
En su archivo AppDelegate
dentro del método de func application
let statusBar: UIView = application.value(forKey: "statusBar") as! UIView
statusBar.backgroundColor = .red
Swift 3
//
// LoginController.swift
// Swift 3
//
// Created by The Crab on 17/01/2017.
// Copyright © 2017 Paxi Labs. All rights reserved.
//
import UIKit
class LoginController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Swift 3
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.black
}
Esa es la solución para establecer el color de fondo de la barra de estado para el controlador de vista específico.
Swift 4 Para ViewController específico sin navigationViewController embedded, simplemente agréguelo a su archivo ViewController.
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
override func viewWillAppear(animated: Bool) {
self.navigationController?.navigationBarHidden = true
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .LightContent
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector("setBackgroundColor:") {
statusBar.backgroundColor = UIColor.redColor()
}
}