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?
ios
ios7
uicolor
ios-statusbar
Rejeesh Rajan
fuente
fuente
Respuestas:
================================================ ======================
Tuve que intentar buscar otras formas. Lo que no implica
addSubview
en 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:didFinishLaunchingWithOptions
funcionó 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
fuente
Ir a su aplicación
info.plist
1) Establecer
View controller-based status bar appearance
enNO
2) Establecer
Status bar style
enUIStatusBarStyleLightContent
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.
fuente
Status bar style
opción. Selecciónelo. Y pegarUIStatusBarStyleLightContent
según su valor.UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
UIApplication.sharedApplication().statusBarFrame
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
fuente
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
fuente
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:
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
UIViewControllerBasedStatusBarAppearance
queNO
en su archivo `.Plist'.Si desea establecer el estilo de la barra de estado, en el nivel del controlador de vista, siga estos pasos:
UIViewControllerBasedStatusBarAppearance
aYES
en el.plist
archivo, si necesita establecer el estilo de la barra de estado solo en el nivel UIViewController.En la función add viewDidLoad -
setNeedsStatusBarAppearanceUpdate
anule favoriteStatusBarStyle en su controlador de vista.
-
override func viewDidLoad() { super.viewDidLoad() self.setNeedsStatusBarAppearanceUpdate() } override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
fuente
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.
fuente
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.
fuente
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 }
fuente
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]; ... }
fuente
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.
fuente
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
fuente
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)
fuente
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)
fuente
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 }
fuente
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
setNavigationBarBackground
mé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.fuente
Prueba esto. Use este código en su
didFinishLaunchingWithOptions
funció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]; }
fuente
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 } }
fuente
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
fuente
Logré personalizar el color StatusBar bastante simple agregando en el
AppDelegate.cs
archivo 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:
Enlace: https://jorgearamirez.wordpress.com/2016/07/18/lesson-x-effects-for-the-status-bar/
fuente
Rápido 4
En
Info.plist
agregar esta propiedadVer la apariencia de la barra de estado basada en el controlador en NO
y después de eso
AppDelegate
dentro dedidFinishLaunchingWithOptions
agregar estas líneas de códigoUIApplication.shared.isStatusBarHidden = false UIApplication.shared.statusBarStyle = .lightContent
fuente
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.
fuente
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)
fuente
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
fuente