¿Cómo cambiar el color de fondo y el color del texto de la barra de estado en iOS 7?

88

Mi aplicación actual se ejecuta en iOS 5 y 6.

La barra de navegación tiene un color naranja y la barra de estado tiene un color de fondo negro con un color de texto blanco. Sin embargo, cuando ejecuto la misma aplicación en iOS 7, observo que la barra de estado se ve transparente con el mismo color de fondo naranja que la barra de navegación y el color del texto de la barra de estado es negro.

Debido a esto, no puedo diferenciar entre la barra de estado y la barra de navegación.

¿Cómo hago para que la barra de estado tenga el mismo aspecto que en iOS 5 y 6, es decir, con color de fondo negro y color de texto blanco? ¿Cómo puedo hacer esto mediante programación?

Rejeesh Rajan
fuente

Respuestas:

174

Advertencia: ya no funciona con iOS 13 y Xcode 11.

================================================ ======================

Tuve que intentar buscar otras formas. Lo que no implica addSubviewen la ventana. Porque estoy subiendo la ventana cuando se presenta el teclado.

C objetivo

- (void)setStatusBarBackgroundColor:(UIColor *)color {

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}

Rápido

func setStatusBarBackgroundColor(color: UIColor) {

    guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
        return
    }

    statusBar.backgroundColor = color
}

Swift 3

func setStatusBarBackgroundColor(color: UIColor) {

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

    statusBar.backgroundColor = color
}

Llamar a este formulario application:didFinishLaunchingWithOptionsfuncionó para mí.

NB Tenemos una aplicación en la tienda de aplicaciones con esta lógica. Así que supongo que está de acuerdo con la política de la tienda de aplicaciones.


Editar:

Úselo bajo su propio riesgo. Forme el comentarista @Sebyddd

Tuve una aplicación rechazada debido a esto, mientras que otra fue aceptada sin problemas. Lo consideran un uso privado de la API, por lo que está sujeto a suerte durante el proceso de revisión :) - Sebyddd

Warif Akhand Rishi
fuente
5
A diferencia de la solución aceptada, esto también funciona cuando cambia de orientación. ¡Gracias!
Michael
5
¿No es eso un uso de API privado?
Foriger
2
Tuve una aplicación rechazada debido a esto, mientras que otra fue aceptada sin problemas. Lo consideran un uso de API privado, por lo que está sujeto a suerte durante el proceso de revisión :)
Sebyddd
3
Hay un problema con esta solución, cuando presiona dos veces el botón de inicio, este color de la barra de estado desaparecerá.
Timeless
3
No funciona en iOS 13. Aplicación llamada -statusBar o -statusBarWindow en UIApplication: este código debe cambiarse ya que ya no hay una barra de estado o una ventana de barra de estado. En su lugar, utilice el objeto statusBarManager en la escena de la ventana.
NSDeveloper
109

Ir a su aplicación info.plist

1) Establecer View controller-based status bar appearanceen NO
2) Establecer Status bar styleen UIStatusBarStyleLightContent

Luego Ir a su delegado de aplicación y pegar el siguiente código donde configura el RootViewController de Windows.

#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];
}

Espero eso ayude.

Shahid Iqbal
fuente
Solo mencionando, los documentos de Apple recomiendan esto si, en su lugar, verifica: if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) {} else {} ¡salud!
Joel Balmer
2
@learner Goto info.plist y luego seleccione cualquier fila. Verá un signo +. Haga clic en el signo más y en el menú desplegable, debería ver la Status bar styleopción. Selecciónelo. Y pegar UIStatusBarStyleLightContentsegún su valor.
Shahid Iqbal
5
Esto no tiene en cuenta la rotación
lostintranslation
4
Es mejor usar el ancho de pantalla UIS:UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
KlimczakM
2
Una forma más sucinta de establecer el marco es usarUIApplication.sharedApplication().statusBarFrame
Doug
28

Mientras se maneja el color de fondo de la barra de estado en iOS 7, hay 2 casos

Caso 1: Vista con barra de navegación

En este caso, use el siguiente código en su método viewDidLoad

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor = [UIColor yellowColor];
 [self.navigationController.navigationBar addSubview:statusBarView];

Caso 2: Vista sin barra de navegación

En este caso, use el siguiente código en su método viewDidLoad

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor  =  [UIColor yellowColor];
 [self.view addSubview:statusBarView];

Enlace de origen http://code-ios.blogspot.in/2014/08/how-to-change-background-color-of.html

Teja Kumar Bethina
fuente
Esto funcionó bien para mí, pero la barra de estado debería tener una altura de 20 puntos: [[UIView alloc] initWithFrame: CGRectMake (0, -20, 320, 20)];
LordParsley
27

1) establezca UIViewControllerBasedStatusBarAppearance en YES en el plist

2) en viewDidLoad haz un [self setNeedsStatusBarAppearanceUpdate];

3) agregue el siguiente método:

 -(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
 } 

ACTUALIZACIÓN:
consulte también la guía de desarrolladores de la barra de estado de ios-7

Muruganandham K
fuente
puede cambiarlo a negro o blanco
Muruganandham K
1
Esto no tiene ningún efecto (ios7, simulador). El "favoriteStatusBarStyle" nunca se invoca.
Adam
1
estás usando xib ?. si el cambio de estado SI valor de la barra de propiedades métricas simulado
Muruganandham K
3
Ah, encontré el problema. UINavigationController de Apple capta la notificación, es decir, su respuesta es solo para cuando el controlador de vista es el controlador superior, no hay contenedores (sin barra de pestañas, sin barra de navegación, etc.).
Adam
3
Caso especial cuando se usa Storyboard + NavigationController. Haz el # 1 arriba. A continuación, cree una subclase para UINavigationController (llámelo myNavController). En Storyboard, configure la clase NavigationController en "myNavController". En myNavController.m, haz # 2 y # 3 arriba. El método del n. ° 3 ahora se llamará en su subclase (establezca un registro o punto de interrupción para observar).
ObjectiveTC
16

Puede establecer el color de fondo para la barra de estado durante el inicio 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:

ingrese la descripción de la imagen aquí


Aquí están las Pautas / Instrucciones de Apple sobre el cambio de la barra de estado. En la barra de estado solo se permiten los colores oscuro y claro (mientras y negro).

Aquí está - Cómo cambiar el estilo de la barra de estado:

Si quieres estilo de barra de estado conjunto, a nivel de aplicación a continuación, establece UIViewControllerBasedStatusBarAppearanceque NOen su archivo `.Plist'.

Si desea establecer el estilo de la barra de estado, en el nivel del controlador de vista, siga estos pasos:

  1. Establezca UIViewControllerBasedStatusBarAppearancea YESen el .plistarchivo, si necesita establecer el estilo de la barra de estado solo en el nivel UIViewController.
  2. En la función add viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. anule favoriteStatusBarStyle en su controlador de vista.

-

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Krunal
fuente
¿Se rechazará la aplicación si las usamos? ¿Se permite cambiar el color de statusBarView como este?
abhimuralidharan
@ abhi1992 No puedo decir si Apple lo aceptará o no porque implementé esta solución en mi aplicación empresarial, que no es necesario enviarla en la tienda de aplicaciones. :)
Krunal
Si pongo esto en un viewdidload de un viewcontroller en una aplicación basada en pestañas, establece el color para cada viewController, no solo en el que puse el código (¿es normal?)
14

En iOS 7, la barra de estado no tiene fondo, por lo tanto, si pones detrás una vista negra de 20px de alto, obtendrás el mismo resultado que iOS 6.

También es posible que desee leer la Guía de transición de la interfaz de usuario de iOS 7 para obtener más información sobre el tema.

Gabriele Petronella
fuente
2
Gabriele, ¿puedes proporcionar un código sobre cómo poner una vista de 20 píxeles de alto detrás?
Dejell
Dejel, esa es la respuesta de Shahid.
Fattie
¡No use simplemente "20"! Puede obtener el valor correctamente, vea mi respuesta larga a continuación.
Fattie
8

Escriba esto en su método ViewDidLoad:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}

Se corrigió el color de la barra de estado para mí y otros errores de ubicación de la interfaz de usuario también hasta cierto punto.

sanjana
fuente
7

Aquí hay una solución total, copiar y pegar, con una

explicación absolutamente correcta

de cada problema involucrado.

¡Gracias a Warif Akhand Rishi !

por el sorprendente hallazgo de keyPath statusBarWindow.statusBar. Buena.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    // handle the iOS bar!
    
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // "Status Bar Style" refers to the >>>>>color of the TEXT<<<<<< of the Apple status bar,
    // it does NOT refer to the background color of the bar. This causes a lot of confusion.
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    
    // our app is white, so we want the Apple bar to be white (with, obviously, black writing)
    
    // make the ultimate window of OUR app actually start only BELOW Apple's bar....
    // so, in storyboard, never think about the issue. design to the full height in storyboard.
    let h = UIApplication.shared.statusBarFrame.size.height
    let f = self.window?.frame
    self.window?.frame = CGRect(x: 0, y: h, width: f!.size.width, height: f!.size.height - h)
    
    // next, in your plist be sure to have this: you almost always want this anyway:
    // <key>UIViewControllerBasedStatusBarAppearance</key>
    // <false/>
    
    // next - very simply in the app Target, select "Status Bar Style" to Default.
    // Do nothing in the plist regarding "Status Bar Style" - in modern Xcode, setting
    // the "Status Bar Style" toggle simply sets the plist for you.
    
    // finally, method A:
    // set the bg of the Apple bar to white.  Technique courtesy Warif Akhand Rishi.
    // note: self.window?.clipsToBounds = true-or-false, makes no difference in method A.
    if let sb = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView {
        sb.backgroundColor = UIColor.white
        // if you prefer a light gray under there...
        //sb.backgroundColor = UIColor(hue: 0, saturation: 0, brightness: 0.9, alpha: 1)
    }
    
    /*
    // if you prefer or if necessary, method B:
    // explicitly actually add a background, in our app, to sit behind the apple bar....
    self.window?.clipsToBounds = false // MUST be false if you use this approach
    let whiteness = UIView()
    whiteness.frame = CGRect(x: 0, y: -h, width: f!.size.width, height: h)
    whiteness.backgroundColor = UIColor.green
    self.window!.addSubview(whiteness)
    */
    
    return true
}
Fattie
fuente
6

Solo para agregar a la respuesta de Shahid, puede tener en cuenta los cambios de orientación o diferentes dispositivos usando esto (iOS7 +):

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...

  //Create the background
  UIView* statusBg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.width, 20)];
  statusBg.backgroundColor = [UIColor colorWithWhite:1 alpha:.7];

  //Add the view behind the status bar
  [self.window.rootViewController.view addSubview:statusBg];

  //set the constraints to auto-resize
  statusBg.translatesAutoresizingMaskIntoConstraints = NO;
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[statusBg(==20)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(statusBg)]];
  [statusBg.superview setNeedsUpdateConstraints];
  ...
}
bendytree
fuente
Sí, esto es incluso mejor para manejar tamaños y orientaciones de pantalla. También agregue algo como esto alrededor de este código: if (NSFoundationVersionNumber> NSFoundationVersionNumber_iOS_6_1)
Benjamin Piette
6

para el fondo, puede agregar fácilmente una vista, como en el ejemplo:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
view.backgroundColor = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:0.1];
[navbar addSubview:view];

donde "navbar" es un UINavigationBar.

usuario3107409
fuente
4
Sus dos primeras líneas son correctas ... Pero la última línea debería ser [navigationController.view addSubview: view]; Debe agregarse dentro de la vista de UINavigationController, no dentro de la vista de UINavigationBar, ya que agregará una vista después de 20 px de la barra de estado sin superponer la barra de estado.
Shahid Iqbal
En Swift use esto: let rect = CGRect (x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIApplication.shared.statusBarFrame.height) let bar = UIView (frame: rect) bar.backgroundColor = UIColor.white navigationController? .View.addSubview (bar)
JVS
5

Rápido 4:

// Cambiar el color de fondo de la barra de estado

let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView

statusBar?.backgroundColor = UIColor.red
V.Kumar
fuente
4

Cambiar el color de fondo de la barra de estado: Swift:

let proxyViewForStatusBar : UIView = UIView(frame: CGRectMake(0, 0,self.view.frame.size.width, 20))    
        proxyViewForStatusBar.backgroundColor=UIColor.whiteColor()
        self.view.addSubview(proxyViewForStatusBar)
Yogesh Lolusare
fuente
1

En el caso de swift 2.0 en iOS 9

Coloque lo siguiente en el delegado de la aplicación, en didFinishLaunchingWithOptions:

    let view: UIView = UIView.init(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, 20))

    view.backgroundColor = UIColor.blackColor()  //The colour you want to set

    view.alpha = 0.1   //This and the line above is set like this just if you want 
                          the status bar a darker shade of 
                          the colour you already have behind it.

    self.window!.rootViewController!.view.addSubview(view)
Keegan Cruickshank
fuente
Esto funciona, pero no creo que sea la mejor manera de manejar este estilo
Michael
1

La solución iTroid23 funcionó para mí. Extrañé la solución Swift. Entonces, tal vez esto sea útil:

1) En mi plist tuve que agregar esto:

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

2) No necesitaba llamar a "setNeedsStatusBarAppearanceUpdate".

3) Rápidamente tuve que agregar esto a mi UIViewController:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
Puñal
fuente
Gracias por la clave "UIViewControllerBasedStatusBarAppearance", me ayudó :)
LightNight
1

Si está usando un UINavigationController, puede usar una extensión como esta:

extension UINavigationController {
    private struct AssociatedKeys {
        static var navigationBarBackgroundViewName = "NavigationBarBackground"
    }

    var navigationBarBackgroundView: UIView? {
        get {
            return objc_getAssociatedObject(self,
                                        &AssociatedKeys.navigationBarBackgroundViewName) as? UIView
        }
        set(newValue) {
             objc_setAssociatedObject(self,
                                 &AssociatedKeys.navigationBarBackgroundViewName,
                                 newValue,
                                 .OBJC_ASSOCIATION_RETAIN)
        }
    }

    func setNavigationBar(hidden isHidden: Bool, animated: Bool = false) {
       if animated {
           UIView.animate(withDuration: 0.3) {
               self.navigationBarBackgroundView?.isHidden = isHidden
           }
       } else {
           navigationBarBackgroundView?.isHidden = isHidden
       }
    }

    func setNavigationBarBackground(color: UIColor, includingStatusBar: Bool = true, animated: Bool = false) {
        navigationBarBackgroundView?.backgroundColor = UIColor.clear
        navigationBar.backgroundColor = UIColor.clear
        navigationBar.barTintColor = UIColor.clear

        let setupOperation = {
            if includingStatusBar {
                self.navigationBarBackgroundView?.isHidden = false
                if self.navigationBarBackgroundView == nil {
                    self.setupBackgroundView()
                }
                self.navigationBarBackgroundView?.backgroundColor = color
            } else {
                self.navigationBarBackgroundView?.isHidden = true
                self.navigationBar.backgroundColor = color
            }
        }

        if animated {
            UIView.animate(withDuration: 0.3) {
                setupOperation()
            }
        } else {
            setupOperation()
        }
    }

    private func setupBackgroundView() {
        var frame = navigationBar.frame
        frame.origin.y = 0
        frame.size.height = 64

        navigationBarBackgroundView = UIView(frame: frame)
        navigationBarBackgroundView?.translatesAutoresizingMaskIntoConstraints = true
        navigationBarBackgroundView?.autoresizingMask = [.flexibleWidth, .flexibleBottomMargin]

        navigationBarBackgroundView?.isUserInteractionEnabled = false

        view.insertSubview(navigationBarBackgroundView!, aboveSubview: navigationBar)
    }
}

Básicamente, hace que el fondo de la barra de navegación sea transparente y utiliza otra UIView como fondo. Puede llamar al setNavigationBarBackgroundmétodo de su controlador de navegación para establecer el color de fondo de la barra de navegación junto con la barra de estado.

Tenga en cuenta que debe usar el setNavigationBar(hidden: Bool, animated: Bool)método en la extensión cuando desee ocultar la barra de navegación, de lo contrario, la vista que se usó como fondo seguirá estando visible.

halil_g
fuente
Para mí, esta fue la mejor respuesta, ya que mitigó muchos otros problemas de respuesta. La desventaja es el frame.size.height = 64 fijo que es incorrecto. Una forma más reciente de obtener la altura sería -> .view.window? .WindowScene? .StatusBarManager? .StatusBarFrame.height ?? 0.
Gonçalo Gaspar
1

Prueba esto. Use este código en su didFinishLaunchingWithOptionsfunción de clase appdelegate :

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[application setStatusBarHidden:NO];
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
    statusBar.backgroundColor = [UIColor blackColor];
}
Karthickkck
fuente
1

El siguiente fragmento de código debería funcionar con Objective C.

   if (@available(iOS 13.0, *)) {
      UIView *statusBar = [[UIView alloc]initWithFrame:[UIApplication sharedApplication].keyWindow.windowScene.statusBarManager.statusBarFrame] ;
      statusBar.backgroundColor = [UIColor whiteColor];
      [[UIApplication sharedApplication].keyWindow addSubview:statusBar];
  } else {
      // Fallback on earlier versions

       UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
          if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
              statusBar.backgroundColor = [UIColor whiteColor];//set whatever color you like
      }
  }
Govind
fuente
Obtendrá una barra de estado doble en iOS 13.
Kelin
0

Para el color de la barra: proporciona una imagen de fondo personalizada para la barra.

Para el color del texto: use la información en Acerca del manejo de texto en iOS

Chris Alan
fuente
1
no se trata de establecer un color de texto
Johnykutty
Agregar una imagen de fondo es una exageración si solo desea establecer un color sólido, y no es factible, especialmente si desea poder cambiar el color sobre la marcha
halil_g
0

Logré personalizar el color StatusBar bastante simple agregando en el AppDelegate.csarchivo en el método:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

siguiente código:

UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;

if (statusBar!=null && statusBar.RespondsToSelector(new Selector("setBackgroundColor:")))
{
   statusBar.BackgroundColor = Color.FromHex(RedColorHex).ToUIColor();
}

Entonces obtienes algo como esto:

ingrese la descripción de la imagen aquí

Enlace: https://jorgearamirez.wordpress.com/2016/07/18/lesson-x-effects-for-the-status-bar/

Dan
fuente
¿Qué lenguaje es este?
Ahmadreza
1
@Alfi Xamarin se forma y en el fondo es C #
Dan
0

Rápido 4

En Info.plistagregar esta propiedad

Ver la apariencia de la barra de estado basada en el controlador en NO

y después de eso AppDelegatedentro de didFinishLaunchingWithOptionsagregar estas líneas de código

UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = .lightContent
Smg baquer
fuente
0

En Swift 5 y Xcode 10.2

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(0.1 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: {

//Set status bar background colour
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = UIColor.red
//Set navigation bar subView background colour
   for view in controller.navigationController?.navigationBar.subviews ?? [] {
      view.tintColor = UIColor.white
      view.backgroundColor = UIColor.red
   }
})

Aquí fijé el color de fondo de la barra de estado y el color de fondo de la barra de navegación. Si no desea que el color de la barra de navegación coméntelo.

iOS
fuente
0

Código SWIFT

            let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: view.width, height: 20.0))
            statusBarView.backgroundColor = UIColor.red
            self.navigationController?.view.addSubview(statusBarView)
Samkit Jain
fuente
0

Puede usar como se muestra a continuación, para iOS 13 * y Swift 4.

1 -> Establecer la apariencia de la barra de estado basada en el controlador de Vista en NO

extension UIApplication {
var statusBarView: UIView? {
    if #available(iOS 13.0, *) {
       let statusBar =  UIView()

        statusBar.frame = UIApplication.shared.statusBarFrame

        UIApplication.shared.keyWindow?.addSubview(statusBar)
      
        return statusBar
    } else {
        let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
        return statusBar
    }
}

usar en didFinishLaunchingWithOptions

UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
Lokesh
fuente