Cambiar la Barra de Estado de Color de Fondo en Swift 3

En XCode 7.3.x enferma cambiado el Color de fondo para mi barra de Estado con:

func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
    return
}
statusBar.backgroundColor = color
}

Pero parece que ya no funciona con Swift 3.0.

Enfermo tratado con:

func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = (UIApplication.shared.value(forKey: "statusBarWindow") as AnyObject).value(forKey: "statusBar") as? UIView else {
    return
}
statusBar.backgroundColor = color
}

Pero me da:

this class is not key value coding-compliant for the key statusBar.

Alguna idea de cómo cambiarlo con XCode8/Swift 3.0?

InformationsquelleAutor derdida | 2016-10-01

11 Kommentare

  1. 140
    extension UIApplication {
        var statusBarView: UIView? {
            if responds(to: Selector("statusBar")) {
                return value(forKey: "statusBar") as? UIView
            }
            return nil
        }
    }
    
    UIApplication.shared.statusBarView?.backgroundColor = .red
    • Esta no es una buena práctica a todos, me desaconseja encarecidamente el uso de este método ya que este UIView es privado. Tengo curiosidad por ver si su aplicación se aprobó el uso de este.
    • ¿Por qué no esta buena práctica. El método value(forKey key: String) es abierto así que supongo que su autorización para utilizar. ¿Puede por favor explicar. Si esta es una mala práctica, ¿cómo se cambia el color de fondo o la barra de estado. Este methd ha trabajado para mí. He intentado añadir un subvista a la window objeto en el AppDelegate y que no funciona.
    • el uso de la value(forKey key: String) método está utilizando la KVC de objc de tiempo de ejecución para acceder a una vista que no deberían tener acceso a (y no tiene la documentación que se refieren a ella por CIERTO) durante el tiempo de ejecución única. Esta construcción se usa bajo iOS 10 pero no en iOS 9, por ejemplo (donde usted necesita para acceder a la statusBarWindow primera), y que han absolutamente ni idea que persiste en iOS 11. Construcción interna y docs no significa que Apple no tiene ningún contrato respecto aquí.
    • ¿Alguien de la cara de la aplicación de rechazo por el uso de este código? o es seguro de usar?
    • No me he enfrentado a un rechazo para su uso como aún
    • Tengo un problema con este método en el iPhone X. El color de fondo se vuelve transparente cuando la app switcher (casa indicador) gesto está activado.

  2. 50

    «Cambio» de la barra de estado de color de fondo:

    let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
    let statusBarColor = UIColor(red: 32/255, green: 149/255, blue: 215/255, alpha: 1.0)
    statusBarView.backgroundColor = statusBarColor
    view.addSubview(statusBarView)

    Cambiar la barra de estado de color de texto:

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    Actualización: por favor, tenga en cuenta que la barra de estado de marco va a cambiar cuando la vista se gira. Usted puede actualizar el creado subvista marco:

    • El uso de la autoresizing máscara:
      statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
    • La observación de NSNotification.Name.UIApplicationWillChangeStatusBarOrientation
    • O reemplazar viewWillLayoutSubviews()
    • Esto debe ser aceptado respuesta
  3. 28

    Con el uso de Swift 3 y 4 puede utilizar el fragmento de código siguiente. Encuentre el punto de vista de UIApplication utilizando valueForKeyPath como establece el color de fondo.

    guard let statusBarView = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else {
            return
        }
    statusBarView.backgroundColor = UIColor.red

    Objective-C

    UIView *statusBarView = [UIApplication.sharedApplication valueForKeyPath:@"statusBarWindow.statusBar"];
    if (statusBarView != nil)
    {
        statusBarView.backgroundColor = [UIColor redColor];
    }
    • Esta es una buena respuesta.
  4. 8

    Para Xcode 9 y iOS 11:
    El estilo de la barra de estado vamos a tratar de lograr es una barra de estado con el contenido de blanco. Ir a la ViewController.swift archivo y agregue las siguientes líneas de código.

    override var preferredStatusBarStyle: UIStatusBarStyle {
    
         return .lightContent
    
    }

    O de proyecto de opción de los ajustes que usted puede cambiar la barra de estado estilo:

    Cambiar la Barra de Estado de Color de Fondo en Swift 3

    Siguiente, volver al Guión gráfico, Seleccione el Controlador de Vista y en el Editor de menú Seleccione Incrustar en la Navegación del Controlador. Seleccione la Barra de Navegación y en el Atributo Inspector conjunto de la Barra de Tinte de color a rojo. El Guión tendrá este aspecto.
    Cambiar la Barra de Estado de Color de Fondo en Swift 3

    Construir y Ejecutar el proyecto, El contenido de la barra de estado es la oscuridad de nuevo, que es el valor predeterminado. La razón de esto es, iOS preguntado por el estilo de la barra de estado de la navegación controlador en lugar de los contenidos de controlador de vista.

    Cambiar la Barra de Estado de Color de Fondo en Swift 3

    Para cambiar el estilo de todos controlador de navegación dentro de la aplicación, cambiar el método siguiente en el AppDelegate.swift archivo.

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

    Construir y Ejecutar el Proyecto de nuevo, esta vez el contenido de la barra de estado cambia a blanco.

    Cambiar la Barra de Estado de Color de Fondo en Swift 3

    • <3 funciona! Xcode 10.2.1
    • <3 @Satnam de Sincronización
  5. 5

    Para iOS 11 y Xcode 9 utilice los pasos siguientes.

    1. crear una extensión para UIApplication clase:

      extension UIApplication {
      var statusBarView: UIView? {
      return value(forKey: "statusBar") as? UIView
      }
      }

    2. En su clase o dondequiera que usted desea cambiar la barra de Estado de color de fondo:

      UIApplication.shared.statusBarView?.backgroundColor = .red

    3. De contenidos luz o de oscuridad contenido de la barra de estado simplemente ir a Info.plist y agregue el siguiente valor de la fila con el valor NO.

    Vista basada en el controlador de la barra de estado apariencia

    1. Ahora acaba de establecer la luz de contenido o lo que usted necesita en el Pestaña General de la configuración del proyecto.
  6. 3

    Probar este

    Goto su información de la aplicación.plist

    1. Opinión basada en el controlador de la barra de estado de apariencia para NO
    2. Establecer la barra de Estado estilo UIStatusBarStyleLightContent

    A continuación, Pasar a delegado de la aplicación y pegue el siguiente código donde puede configurar su Windows RootViewController.

    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
    {
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
        view.backgroundColor=[UIColor blackColor];
        [self.window.rootViewController.view addSubview:view];
    }
    • La barra de estado, no NavigationBar.
    • gracias por la ayuda. a mí me funciona.
  7. 2
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any] ?) -> Bool {
        //Override point for customization after application launch.
    
        UINavigationBar.appearance().barStyle = .blackOpaque
        return true
    }

    Esto funciona para mí, como mi navegación barTintColor era negro y no puede ver la barra de estado.

    Cuando se establece código de arriba es didFinishLaunch barra de estado aparece en blanco.

  8. 1

    Puede establecer el color de fondo para la barra de estado durante la ejecución de la aplicación o durante viewDidLoad de su controlador de vista.

    extension UIApplication {
    
        var statusBarView: UIView? {
            return value(forKey: "statusBar") as? UIView
        }
    
    }
    
    //Set upon application launch, if you've application based status bar
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
        var window: UIWindow?
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
            return true
        }
    }
    
    
    or 
    //Set it from your view controller if you've view controller based statusbar
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        }
    
    }

    Aquí está el resultado:

    Cambiar la Barra de Estado de Color de Fondo en Swift 3

  9. 0

    La posible solución es la adición de vista que se utilizará como fondo de la barra de estado en su viewController:

    let frame = screenController.view.convert(UIApplication.shared.statusBarFrame, to: screenController.view)
    let backview = UIView(frame: frame)
    
    backview.backgroundColor = backgroundColor
    screenController.view.addSubview(backview)
    screenController.view.bringSubviewToFront(backview)
  10. 0

    Agregar el siguiente código en tu archivo de extensión para editar la barra de estado en swift 4 y Arriba:

    extension UIApplication {
        var statusBarView: UIView? {
            if responds(to: Selector(("statusBar"))) {
                return value(forKey: "statusBar") as? UIView
            }
            return nil
        }
    }

    ahora, podemos editar de la barra de estado añadiendo la siguiente línea en nuestro ViewController clase:

    UIApplication.shared.statusBarView?.backgroundColor = <Your Color name>
    
    ex: UIApplication.shared.statusBarView?.backgroundColor = .red

    Esperanza, esto le será útil.
    Gracias

  11. 0

    Hice esta extensión para cambiar el color de la barra de estado. No depende de la clave.
    Por lo que es mucho más seguro utilizar

    public extension UIViewController {
        func setStatusBar(color: UIColor) {
            let tag = 12321
            if let taggedView = self.view.viewWithTag(tag){
                taggedView.removeFromSuperview()
            }
            let overView = UIView()
            overView.frame = UIApplication.shared.statusBarFrame
            overView.backgroundColor = color
            overView.tag = tag
            self.view.addSubview(overView)
        }
    }

    Aquí es el uso de cualquier lugar en el viewcontroller:

    setStatusBar(color: .red)

    • Su no está trabajando correctamente con el iPhone X dispositivos . Cubre sólo la mitad de la barra de estado.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein