Cómo configurar el estilo de la barra de estado en Swift 3

Estoy usando Xcode 8.0 beta 4.

En la versión anterior, UIViewController tiene un método para establecer el estilo de barra de estado

public func prefernetworkingStatusBarStyle() -> UIStatusBarStyle 

Sin embargo, lo encontré cambiado a "Obtener SOLO varaiable" en Swift 3.

 public var prefernetworkingStatusBarStyle: UIStatusBarStyle { get } 

¿Cómo puedo proporcionar el estilo para usar en mi UIViewController?

Puede intentar anular el valor devuelto, en lugar de configurarlo. El método se declara como {get}, así que simplemente proporcione un getter:

  override var prefernetworkingStatusBarStyle: UIStatusBarStyle { return .lightContent } 

Si configura esto condicionalmente, necesitará llamar a setNeedsStatusBarAppearanceUpdate() para que setNeedsStatusBarAppearanceUpdate() el cambio cuando esté listo

ios 10 y swift 3

  1. Cambie en info.plist la fila Visualice la apariencia de la barra de estado basada en el controller y configúrela en NO

  2. Cambiar en appDelegate.swift en didFinishLaunchingWithOptions

     UIApplication.shanetworking.statusBarStyle = .lightContent 

Swift 3, iOS 10
Para mí, este método no funciona:

 override var prefernetworkingStatusBarStyle: UIStatusBarStyle { return .lightContent } 

cuando utilicé a cada controller de vista, pero esto funcionó:

  • En file info.list, agregue fila: View controller-based status bar appearance y establezca NO

  • Siguiente en appdelegate:

     UIApplication.shanetworking.statusBarStyle = .lightContent 

Debe agregar la siguiente key en su file Info.plist:

View controller-based status bar appearance con el valor boolean establecido en NO

En su class appdelegate, en el método didFinishLaunchingWithOptions antes del retorno.

 let statusBar: UIView = UIApplication.shanetworking.value(forKey: "statusBar") as! UIView if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) { statusBar.backgroundColor = UIColor.networking } UIApplication.shanetworking.statusBarStyle = .lightContent 

Cambie backgroundColor y statusBarStyle según el requisito.

Si desea cambiar el estilo de la barra de estado en cualquier momento después de que la vista haya aparecido, puede usar esto:

  • En el file info.list, agregue fila: vea la apariencia de la barra de estado basada en el controller y configúrela en

     var viewIsDark = Bool() func makeViewDark() { viewIsDark = true setNeedsStatusBarAppearanceUpdate() } func makeViewLight() { viewIsDark = false setNeedsStatusBarAppearanceUpdate() } override var prefernetworkingStatusBarStyle: UIStatusBarStyle { if viewIsDark { return .lightContent } else { return .default } } 

El primer paso es agregar una fila con la tecla: View controller-based status bar appearance y valorar NO al file Info.plist . Después de eso, agregue 2 funciones en su controller a específicas solo que el controller afectará:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) UIApplication.shanetworking.statusBarStyle = .lightContent } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) UIApplication.shanetworking.statusBarStyle = .default } 

Si desea cambiar el statusBar la statusBar a blanco, para todas las vistas contenidas en un UINavigationController , agregue esto dentro de AppDelegate :

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. UINavigationBar.appearance().barStyle = .blackOpaque return true } 

Este código:

 override var prefernetworkingStatusBarStyle: UIStatusBarStyle { return .lightContent } 

no funciona para UIViewControllers contenidos en un UINavigationController , ya que el comstackdor busca el statusBarStyle del UINavigationController , no para el statusBarStyle de ViewControllers contiene.

Espero que esto ayude a aquellos que no han tenido éxito con la respuesta aceptada.

Xcode 8.3.1, Swift 3.1

  1. Cree una nueva input en info.plist "Visualización de la apariencia de la barra de estado basada en el controller" y configúrelo en "NO".

  2. Abra AppDelegate.swift y añada estas líneas en el método "didFinishLaunchingWithOptions":

application.statusBarStyle = .lightContent

También puedes hacer esto en el guión gráfico.

  1. Cree una nueva input en info.plist "Visualización de la apariencia de la barra de estado basada en el controller", configúrelo en "SÍ".
  2. Vaya a su guión gráfico y luego select el controller de navigation que desea cambiar. Haga clic en la barra de navigation de la sección del esquema del documento Storyboard (panel izquierdo en el guión gráfico)
  3. Vaya al panel derecho y click la sección de attributes.
  4. En la sección Barra de navigation, verá el estilo. Seleccione el estilo que desea (el valor pnetworkingeterminado es negro y negro es blanco)

Tendrá que hacer esto para cada controller de navigation que tenga. Sin embargo, cualquier vista de ese controller de navigation cambiará el estilo / color de barras de estado de la vista a la que acaba de seleccionar. Encuentro esta opción mejor porque puedes ver tus resultados al instante y no tienes que agregar líneas adicionales de código en cada controller de vista.

introduzca la descripción de la imagen aquí

(Hecho con Xcode 8.3.3 en un proyecto de Swift)

Esto funciono para mi

Establezca la apariencia de la View controller-based status bar en NO en Plist y, a continuación, en UIViewController viewDidAppear acaba de agregar la siguiente línea

 UIApplication.shanetworking.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true) 

veloz 3

si Vista apariencia de barra de estado basada en el controller = SÍ en Info.plist

luego usa esta extensión para todos los controles de navigation

  extension UINavigationController { override open var prefernetworkingStatusBarStyle: UIStatusBarStyle { return .lightContent } } 

si no hay UINavigationController y solo tiene UIViewController, utilice el código siguiente:

  extension UIViewController { override open var prefernetworkingStatusBarStyle: UIStatusBarStyle { return .lightContent } } 

Swift 3, Xcode 8.3.3

Primero, ingrese a Info.plist y agregue una fila llamada "Visualización de la apariencia de la barra de estado basada en el controller" y establezca su valor (solo boolean) en "NO".

 class YourViewController: UIViewController { // view did load override func viewDidLoad() { super.viewDidLoad() // custom status bar UIApplication.shanetworking.statusBarStyle = .lightContent //or .default setNeedsStatusBarAppearanceUpdate() } } 

Estuve obteniendo:

El reemploop de var debe ser tan accesible como su tipo de cierre.

Lo cual se soluciona al agregar public como:

 override public var prefernetworkingStatusBarStyle: UIStatusBarStyle { get { return .lightContent } } 

En Swift3 iOS10.

Para el objective C, solo agregue esta línea en su método didFinishLaunch de la aplicación

 UIApplication.shanetworkingApplication.statusBarStyle = UIStatusBarStyleLightContent; 

Swift 3

Para configurar la misma apariencia de la Barra de navigation en su aplicación, puede hacer esto en AppDelegate.swift:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { setupNavigationBarAppearence() return true } private func setupNavigationBarAppearence(){ let navigationBarAppearace = UINavigationBar.appearance() navigationBarAppearace.isTranslucent = false //nav bar color navigationBarAppearace.barTintColor = UIColor.primaryColor() //SETS navbar title string to white navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white] //Makes the batery icon an any other icon of the device to white. navigationBarAppearace.barStyle = .black }