Meu aplicativo atual é executado no iOS 5 e 6.
A barra de navegação tem uma cor laranja e a barra de status tem uma cor de fundo preta com texto em branco. No entanto, quando executo o mesmo aplicativo no iOS 7, observo que a barra de status parece transparente com a mesma cor de fundo laranja da barra de navegação e a cor do texto da barra de status é preta.
Devido a isso, não consigo diferenciar entre a barra de status e a barra de navegação.
Como faço para que a barra de status tenha a mesma aparência que era no iOS 5 e 6, ou seja, com fundo preto e texto branco? Como posso fazer isso programaticamente?
ios
ios7
uicolor
ios-statusbar
Rejeesh Rajan
fonte
fonte
Respostas:
======================================================== ========================
Tive que tentar procurar outras maneiras. Que não envolve
addSubview
janela. Porque estou subindo a janela quando o teclado é apresentado.Objective-C
- (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 }
Ligar para este formulário
application:didFinishLaunchingWithOptions
funcionou para mim.NB Temos um app na app store com essa lógica. Então, acho que está tudo bem com a política da app store.
Editar:
Use por sua conta e risco. Forme o comentador @Sebyddd
fonte
Vá para seu aplicativo
info.plist
1) Defina
View controller-based status bar appearance
comoNO
2) Defina
Status bar style
comoUIStatusBarStyleLightContent
Então Vá para seu delegado de aplicativo e cole o código a seguir onde você definiu o RootViewController do 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 que ajude.
fonte
Status bar style
opção. Selecione-o. E coleUIStatusBarStyleLightContent
conforme seu valor.UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
UIApplication.sharedApplication().statusBarFrame
Ao lidar com a cor de fundo da barra de status no iOS 7, existem 2 casos
Caso 1: visualizar com barra de navegação
Neste caso, use o seguinte código em seu 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: visualizar sem barra de navegação
Neste caso, use o seguinte código em seu 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];
Link da fonte http://code-ios.blogspot.in/2014/08/how-to-change-background-color-of.html
fonte
1) defina UIViewControllerBasedStatusBarAppearance como YES no plist
2) em viewDidLoad faça um
[self setNeedsStatusBarAppearanceUpdate];
3) adicione o seguinte método:
-(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
ATUALIZAÇÃO:
verifique também a barra de status do developers-guide-to-the-ios-7-status
fonte
Você pode definir a cor de fundo para a barra de status durante a inicialização do aplicativo ou durante viewDidLoad de seu controlador de visualização.
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 } }
Aqui está o resultado:
Aqui estão as orientações / instruções da Apple sobre a alteração da barra de status. Apenas escuro e claro (enquanto e preto) são permitidos na barra de status.
Aqui está - Como alterar o estilo da barra de status:
Se você deseja definir o estilo da barra de status e o nível do aplicativo, defina
UIViewControllerBasedStatusBarAppearance
comoNO
em seu arquivo `.plist '.se você quiser definir o estilo da barra de status, no nível do controlador de visualização, siga estas etapas:
UIViewControllerBasedStatusBarAppearance
comoYES
no.plist
arquivo, se precisar definir o estilo da barra de status apenas no nível UIViewController.Na função de adição viewDidLoad -
setNeedsStatusBarAppearanceUpdate
substituir preferredStatusBarStyle em seu controlador de visualização.
-
override func viewDidLoad() { super.viewDidLoad() self.setNeedsStatusBarAppearanceUpdate() } override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
fonte
No iOS 7, a barra de status não tem um fundo, portanto, se você colocar uma visão preta de 20 pixels de altura atrás dela, você obterá o mesmo resultado do iOS 6.
Além disso, você pode querer ler o Guia de transição da IU do iOS 7 para obter mais informações sobre o assunto.
fonte
Escreva isso em seu método ViewDidLoad:
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { self.edgesForExtendedLayout=UIRectEdgeNone; self.extendedLayoutIncludesOpaqueBars=NO; self.automaticallyAdjustsScrollViewInsets=NO; }
Ele corrigiu a cor da barra de status para mim e outros erros de interface do usuário também até certo ponto.
fonte
Aqui está uma solução total de copiar e colar, com um
explicação absolutamente correta
de cada questão envolvida.
Com agradecimentos a Warif Akhand Rishi !
para o incrível achado sobre keyPath
statusBarWindow.statusBar
. Um bom.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 }
fonte
Apenas para acrescentar à resposta de Shahid - você pode levar em conta as mudanças de orientação ou dispositivos diferentes usando isto (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]; ... }
fonte
para o fundo, você pode adicionar facilmente uma visualização, como no exemplo:
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];
onde "navbar" é um UINavigationBar.
fonte
Swift 4:
// Alterar a cor de fundo da barra de status
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView statusBar?.backgroundColor = UIColor.red
fonte
Alterar a cor de fundo da barra de status: Swift:
let proxyViewForStatusBar : UIView = UIView(frame: CGRectMake(0, 0,self.view.frame.size.width, 20)) proxyViewForStatusBar.backgroundColor=UIColor.whiteColor() self.view.addSubview(proxyViewForStatusBar)
fonte
No caso do swift 2.0 no iOS 9
Coloque o seguinte no delegado do aplicativo, em 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)
fonte
A solução iTroid23 funcionou para mim. Eu perdi a solução Swift. Então, talvez isso seja útil:
1) No meu plist, tive que adicionar isto:
<key>UIViewControllerBasedStatusBarAppearance</key> <true/>
2) Não precisei chamar "setNeedsStatusBarAppearanceUpdate".
3) Rapidamente, tive que adicionar isso ao meu UIViewController:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
fonte
Se estiver usando um
UINavigationController
, você pode usar uma extensão 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) } }
Basicamente, torna o fundo da barra de navegação transparente e usa outro UIView como fundo. Você pode chamar o
setNavigationBarBackground
método do seu controlador de navegação para definir a cor de fundo da barra de navegação junto com a barra de status.Lembre-se de que você deve usar o
setNavigationBar(hidden: Bool, animated: Bool)
método na extensão quando quiser ocultar a barra de navegação, caso contrário, a visualização que foi usada como plano de fundo ainda estará visível.fonte
Experimente isso. Use este código em sua
didFinishLaunchingWithOptions
função de classe 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]; }
fonte
O snippet de código a seguir deve funcionar com o 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 } }
fonte
Para a cor da barra: você fornece uma imagem de plano de fundo personalizada para a barra.
Para a cor do texto: use as informações em Sobre o tratamento de texto no iOS
fonte
Consegui personalizar a cor do StatusBar de forma bastante simples, adicionando um
AppDelegate.cs
arquivo no método:public override bool FinishedLaunching(UIApplication app, NSDictionary options)
próximo 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(); }
Então você consegue algo assim:
Link: https://jorgearamirez.wordpress.com/2016/07/18/lesson-x-effects-for-the-status-bar/
fonte
Swift 4
Em
Info.plist
adicionar esta propriedadeVer a aparência da barra de status baseada no controlador para NÃO
e depois disso no
AppDelegate
interior dodidFinishLaunchingWithOptions
adicione estas linhas de códigoUIApplication.shared.isStatusBarHidden = false UIApplication.shared.statusBarStyle = .lightContent
fonte
Em Swift 5 e 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 } })
Aqui, fixei a cor de fundo da barra de status e a cor de fundo da barra de navegação. Se você não quiser a cor da barra de navegação, comente.
fonte
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)
fonte
Você pode usar como abaixo, para iOS 13 * e Swift 4.
1 -> Definir a aparência da barra de status baseada no controlador de Visualização para NÃO
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 em didFinishLaunchingWithOptions
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
fonte