Como alterar a cor do texto da barra de status no iOS

990

Meu aplicativo tem um fundo escuro, mas no iOS 7 a barra de status ficou transparente. Portanto, não vejo nada lá, apenas o indicador verde da bateria no canto. Como posso alterar a cor do texto da barra de status para branco como na tela inicial?

Oleksandr Veremchuk
fonte
9
Este link tem informações interessantes sobre esse assunto: doubleencore.com/2013/09/…
Adriano Lucas

Respostas:

1380
  1. Defina UIViewControllerBasedStatusBarAppearancecomo YESno arquivo .plist.

  2. No viewDidLoadfazer um[self setNeedsStatusBarAppearanceUpdate];

  3. Adicione o seguinte método:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }

Nota : Isso não funciona para controladores internos UINavigationController, consulte o comentário da Tyson abaixo :)

Swift 3 - Isso funcionará nos controladores internos UINavigationController. Adicione esse código dentro do seu controlador.

// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 5 e SwiftUI

Para o SwiftUI, crie um novo arquivo rápido chamado HostingController.swift

import Foundation
import UIKit
import SwiftUI

class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

Altere as seguintes linhas de código no diretório SceneDelegate.swift

window.rootViewController = UIHostingController(rootView: ContentView())

para

window.rootViewController = HostingController(rootView: ContentView())
Peter B. Kramer
fonte
78
Eu não precisava Passo 2.
Jason Moore
37
Não parece estar funcionando no iOS 7 Beta 5 com Xcode5-DP5. selectedStatusBarStyle não parece ser chamado.
wilsontgh
18
UIViewControllerBasedStatusBarAppearance é alterado para Ver aparência barra de status baseada em controlador de semente Xcode 5 GM
parilogic
42
Obtenha a resposta para o Xcode GM Seed: 1. Em Info.plist, coloque a aparência da barra de status baseada em controlador de exibição como NO 2. No appDelegate, dentro do método appDidFinishLaunching, coloque [[UIView aparecimento] setTintColor: [UIColor whiteColor]];
parilogic
101
UINavigationController é um caso especial, o acima não funcionará. Passei horas coçando minha cabeça sobre isso. Veja aqui para a solução: stackoverflow.com/a/19513714/505457
Tyson
848

Como alternativa, você pode desativar a aparência da barra de status baseada no controlador de exibição:

  1. Defina View controller-based status bar appearancecomo NOno seu Info.plist.
  2. Ligar [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Nota: Este método foi preterido no iOS9. Use preferredStatusBarStyleno UIViewController. (consulte Apple Developer Library )

wilsontgh
fonte
16
Esta é uma rota muito melhor e mais fácil.
Mick Byrne
227
Não há necessidade de codificar. Tudo isso pode ser feito da seguinte maneira: (1) defina "Exibir aparência da barra de status baseada no controlador" como NÃO e (2) defina "estilo da barra de status" como "estilo preto opaco". (Os valores brutos são UIViewControllerBasedStatusBarAppearance -> NO e UIStatusBarStyle -> UIStatusBarStyleBlackOpaque)
SwiftArchitect
3
Observe que você deve definir o valor info.plist relevante como NO para que isso funcione.
Abhi Beckert 29/09
9
@gothicdev: boa captura. Aceitaria sua resposta, pois é a mais limpa. Opção leve para Bar Estilo poderia ser: UIStatusBarStyleLightContent
Benka
9
Este método tem sido preterido na iOS 9.
lostAtSeaJoshua
439

Você pode fazer isso sem escrever nenhuma linha de código!
Faça o seguinte para fazer com que o texto da barra de status fique branco em todo o aplicativo

No projeto do arquivo plist :

  • Estilo da barra de status: Transparent black style (alpha of 0.5)
  • Exibir a aparência da barra de status baseada no controlador: NO
  • A barra de status está inicialmente oculta: NO
Lucas
fonte
12
Não sei se as coisas mudaram, mas o valor UIStatusBarStyleLightContent não é reconhecido pelo XCode e não foi encontrado em nenhuma documentação ... Embora pareça funcionar.
Nathan H
5
Este também mudou na tela inicial, enquanto apenas configurá-lo no navegador não ... Parabéns!
viniciusnz
3
Definitivamente, a maneira mais fácil de fazer isso e, como mencionado, também funciona na tela inicial.
7wonders
4
Não há nada chamado UIStatusBarStyleLightContentno plist infoNo entanto, há Transparent Blackque fazer o mesmo truque :) plus, você precisa adicionar View controller-based status bar appearanceuma vez que não está lá originalmente e é tudo o que você precisa para obtê-lo para o trabalho :)
user1949873
45
Para pessoas preguiçosas como eu, copie e cole fora: <key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Adam Waite
241

Nota: A resposta mais votada não funciona no iOS 7/8

No Info.plist, defina 'Exibir aparência da barra de status baseada em controlador' como NÃO

No AppDelegate, adicione

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

para

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

Esta solução funciona para iOS 7/8

Pradeep Mahdevu
fonte
10
Descontinuado no iOS 9.: - /
sudo make install
112

Para mim, nada aconteceu com o uso de todas as coisas nas outras respostas (e de outras fontes / documentação). O que ajudou foi definir o Estilo da barra de navegação como "Preto" no XIB. Isso mudou o texto para branco sem nenhum código.

Digite a descrição da imagem aqui

haraldmartin
fonte
3
No dispositivo, nenhuma das respostas acima funcionou para mim, exceto esta. Eu acho que diz tudo sobre o novo sistema que você precisa definir a navigation_bar como BLACK para ter o status_bar como WHITE.
precisa saber é o seguinte
2
Depois de lutar por muitas coisas, foi isso que acabou funcionando. O estilo foi definido como padrão. Mudou isso e retirou todos os outros hacks da barra de status e funciona.
Gujamin
1
Se você não deseja definir todas as barras de navegação no IB, também pode definir seu proxy de aparência. [[Aparência do UINavigationBar] setBarStyle: UIBarStyleBlack];
Steve Moser
3
Não funciona para mim no iOS7 Storyboard. Parece que isso pode ser um efeito colateral de outra coisa?
31414 Chris
Gostaria de confirmar que todas as respostas acima também não funcionaram para mim. Após a imagem, o texto da barra de status parece branco. Mas repito novamente, as RESPOSTAS acima com Xcode 6.2 e iOS 8.2 não funcionam.
Markus
98

Nada disso funcionou para mim, então aqui está uma solução funcional ...

Em Info.plist, adicione uma linha:

UIViewControllerBasedStatusBarAppearancee defina o valor NO.

Em AppDelegate in didFinishLaunchingWithOptions, adicione estas linhas:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
stepik21
fonte
Esta solução funcionou para mim, enquanto as acima não.
John Contarino 06/06
Impressionante mas isso UIViewControllerBasedStatusBarAppearance convertidos ao mesmo: Exibir status aparecimento bar baseada em controlador automaticamente :)
Abhishek Thapliyal
63

Você não precisa fazer nenhum código para isso

Você precisa adicionar a chave "Exibir aparência da barra de status baseada no controlador" em info.plist da seguinte maneira: insira a descrição da imagem aqui

e defina seu tipo de valor como Booleano e valor como NÃO. Em seguida, clique nas configurações do projeto, clique na guia Geral e, em Informações de implantação, defina o estilo preferido da barra de status como .Light da seguinte maneira:

insira a descrição da imagem aqui

É isso aí.

Ajinkya Patil
fonte
1
Gostei da sua abordagem! No meu caso, eu estava tentando descobrir como tornar o estilo da barra de status claro somente quando estiver em tela cheia (sem a barra de navegação). Então, percebi que todas as outras telas deveriam se encaixar no mesmo estilo de luz. Portanto, uma boa solução é definir tudo. Obrigado! (:
Igor de Lorenzi
Se você não precisar alterar isso enquanto o aplicativo estiver em execução. Essa é a melhor abordagem.
Michael
Essa abordagem definitivamente funciona, mas apresenta uma questão estranha no iPad. Caso seu aplicativo ofereça suporte a deeplinks, e quando você inicia o aplicativo através do deeplink, o backlink que aparece na barra de status desaparece.
Chitranshu Asthana
Melhor e mais simples.
Amit Kumar
a melhor solução para mim: D
Gold Chicken
48

Apenas duas etapas da seguinte maneira:

Passo 1:

Na guia Informações do project target, Adicionar linha:

UIViewControllerBasedStatusBarAppearance, defina o valor NO.

Passo 2:

No projeto AppDelegate.m:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{[application setStatusBarStyle:UIStatusBarStyleLightContent];}
folse
fonte
4
Eu amo essa resposta para isso é a primeira vez que eu estou usando o param "aplicação"))
MUH Mobile Inc.
Notação de ponto e seria perfeito;)
Rivera
43

Isso funciona no Golden Master iOS 7 e no Xcode 5 GM seed e no iOS7 SDK lançado em 18 de setembro de 2013 (pelo menos com o controlador de navegação oculto):

  1. Defina the UIViewControllerBasedStatusBarAppearancecomo NOno Info.plist.

  2. No ViewDidLoadmétodo ou em qualquer lugar, onde você deseja alterar o estilo da barra de status: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Deniss Fedotovs
fonte
1
Os valores padrão de UIViewControllerBasedStatusBarAppearance parecem ser YES. "Os aplicativos usam como padrão o novo sistema de gerenciamento da barra de status do controlador de exibição. Para desativar isso, adicione um valor NO para a chave UIViewControllerBasedStatusBarAppearance no seu Info.plist." [ bgr.com/2013/09/10/ios-7-gm-change-log-release-notes/]
Zsolt
1
Depois de definir o UIViewControllerBasedStatusBarAppearance como NO, a barra de status oculta nas visualizações.
você precisa saber é o seguinte
deve ser aplicado a todos os viewdidload?
Arnlee Vizcayno 23/09
Você pode adicioná-lo apenas no método appDelegates didFinishLoading. Ou, nas primeiras visualizações, o método viewDidLoad, se você não deseja que ele mude.
Deniss Fedotovs 23/09
1
fantástico, este fez o trabalho. codificação simples e excelente.
Felipe Felipe
32

Caso seu UIViewController esteja dentro de um UINavigationController, você precisará definir o BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

A resposta original está aqui

https://devforums.apple.com/message/844264#844264

Mohit Padalia
fonte
Não, isso simplesmente torna a barra de navegação colorida da mesma forma que a cor do texto da barra de status. Isso esconde o problema, não o corrige!
Wpearse
2
No iOS7, a barra de status imitará a UINavigationBar se a exibição contiver um UINavigationController; portanto, em muitos casos, esta é a resposta correta.
jonstaff
29

Se você tiver um controlador de navegação incorporado criado por meio do Interface Builder , defina o seguinte em uma classe que gerencia seu controlador de navegação:

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

Isso deve ser tudo o que você precisa.

mateus bernardo
fonte
Esta foi a única solução que funcionou para mim em um aplicativo sem storyboard e sem xib. Também deve ser útil para usuários não-IB.
Johnny faíscas
2
Isso foi perfeito para mim quando eu precisei definir o estilo de maneira diferente em cada controlador de exibição
Ben
Se você deseja manter "Exibir aparência da barra de status com base no controlador" definido como sim, este é o caminho a seguir. Obrigado!
cloudsurfin
28

Estou usando o Xcode 6 beta 5 em um projeto Swift , para um aplicativo iOS 7.

Aqui está o que eu fiz e funciona:

info.plist:

Digite a descrição da imagem aqui

fancoolo
fonte
2
Graças a sua aparência como apenas a sua solução de trabalho com a mais recente versão de iOS7
Dekel Maman
Esta solução mostra a barra de status durante o carregamento do aplicativo, na tela de inicialização.
Juan Boero
Resolvi meus problemas no xCode 7.1. Última versão. A Apple esqueceu algumas peças cruciais para fazer alguma coisa funcionar. Novamente.
Michael
22

No AppDelegate.m, adicione o seguinte.

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

E no arquivo Plist, defina 'Exibir aparência da barra de status baseada em controlador' como NÃO.

neo D1
fonte
20

Simply In Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Vivek Sehrawat
fonte
5
A única resposta que realmente funcionou para mim.
Wim Haanstra
6
Mas, para isso, precisamos optar por não exibir a aparência da barra de status baseada no controlador .
Iamyogish
Descontinuado no iOS9
Dimitris
20

Bem, isso está realmente funcionando como um pedaço de bolo para mim.

Vá para o seu aplicativo info.plist.

  1. Defina View controller-based status bar appearancecomoNO
  2. Defina Status bar stylecomoUIStatusBarStyleLightContent

Em seguida, vá para o representante do seu aplicativo e cole o código a seguir, onde você define 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,320, 20)];
    view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
    [self.window.rootViewController.view addSubview:view];
}

Bingo. Está funcionando para mim.

Shahid Iqbal
fonte
1
eu acho que esta é a resposta correta (a parte do plist) ... por que eu adicionar código estático no didFinishLaunchingWithOptions ... Se você precisar de mesma cor para todo o aplicativo este é o caminho certo
user2387149
20
  1. Vá para Project-> Target,

  2. Em seguida, defina Status Bar Stylecomo Light. Torna a barra de status branca da tela de inicialização. Configuração do Projeto

  3. Em seguida, defina View controller-based status bar appearanceigual a NOin Info.plist.

Wanbok Choi
fonte
2
A segunda parte onde você define o real View controller-based status bar appearance equalpara NOera a peça que estava faltando. Obrigado
Will
18

Alteração nas informações PLIST No Swift 3 é muito fácil, apenas com 2 etapas. Vá para o seu info.plist e altere a chave View controller-based status bar appearancepara "NÃO". Em seguida, no Appdelegate, basta adicionar esta linha no método de concluir o lançamento com opções

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

isso foi preterido no iOS9 agora você deve substituir essa propriedade no rootviewcontroller

fazer isso foi preterido no iOS 9 deve fazer isso no rootviewcontroller

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }
James Rochabrun
fonte
1
É incrível mano :) Obrigado.
Naresh Reddy M
fazendo isso tem sido preterida no iOS 9 deve fazer isso na RootViewController override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}
James Rochabrun
17

O iOS 7 permite que os controladores de exibição individuais determinem a aparência da barra de status, conforme descrito na documentação do desenvolvedor da Apple:

O iOS 7 oferece aos controladores de exibição a capacidade de ajustar o estilo da barra de status enquanto o aplicativo está em execução. Uma boa maneira de alterar dinamicamente o estilo da barra de status é implementar preferredStatusBarStylee - dentro de um bloco de animação - atualizar a aparência e a chamada da barra de status setNeedsStatusBarAppearanceUpdate.

Definir a aparência da barra de status globalmente é um processo de duas etapas.

Primeiro, você precisa informar ao iOS que não deseja definir a aparência da barra de status, vista a exibição.

Então você precisa assumir o controle e definir o novo estilo da barra de status global.

Para desativar o controle da barra de status de exibição por exibição, você precisará definir a View controller-based status bar appearancepropriedade emInfo.plist .

Abra o Navegador de projeto, selecione o projeto para o seu aplicativo iOS e selecione a guia Informações.

Passe o mouse sobre uma linha e clique no sinal de adição que aparece para adicionar uma nova propriedade ao seu .plist .

Digite View controller-based status bar appearanceno campo Chave e verifique se o campo Tipo está definido como Boolean. Por fim, insiraNO o campo Valor.

Para definir um estilo global para a barra de status, adicione outra propriedade na guia Informações com uma chave de Status bar style, um Tipo de Stringe um Valor de Opaque black style.

Aqui está uma postagem no blog com um pouco mais de detalhes e um código de exemplo:

http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

Josh Earl
fonte
Obrigado. Meu problema foi que não vi que o tipo de "Exibir aparência da barra de status com base no controlador" estivesse definido como String. A edição do arquivo .plist "manualmente" e a inserção do valor booleano esclareceram as coisas.
Chris Prince
12

Não é necessário fazer mais, basta escrever esse código no seu viewController e obter a barra de status em branco

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Mohit Tomar
fonte
Coloque isso em ViewController.m após a implementação. É o mais fácil e funciona muito bem! Obrigado Mohit!
Phil Mulkins
12

Resposta atualizada para Xcode GM Seed:

  1. Em Info.plistcolocar View controller-based status bar appearancecomoNO

  2. No projeto, defina:

    Digite a descrição da imagem aqui

  3. Em ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

parilogic
fonte
Isso mudou a barra de guias, não a barra de status para mim.
21413 Keith
11

Eu acho que todas as respostas realmente não apontam o problema porque todas elas funcionam em cenários específicos. Mas se você precisar cobrir todos os casos, siga os pontos abaixo:

Dependendo de onde você precisa do estilo de luz da barra de status, você deve sempre ter em mente estes 3 pontos:

1) Se você precisar da barra de status na tela de inicialização ou em outros lugares, onde não poderá controlá-la (não nos controladores de exibição, mas em alguns elementos / momentos controlados pelo sistema como Tela de Lançamento) Você acessa as configurações do projeto Configurações do projeto

2) se você tiver um controlador dentro de um controlador de navegação Você pode alterá-lo no construtor de interface da seguinte maneira:

a) Selecione a barra de navegação do seu controlador de navegação Selecione a barra de navegação do seu controlador de navegação

b) Em seguida, defina o estilo da barra de navegação como "Preto", pois isso significa que você terá um fundo "preto" -> escuro sob a barra de status, para que a barra de status seja branca

insira a descrição da imagem aqui

Ou faça isso no código da seguinte maneira

navigationController?.navigationBar.barStyle = UIBarStyle.Black

3) Se você tiver apenas o controlador que precisa ter seu próprio estilo de barra de status e não está incorporado em alguma estrutura de contêiner como um UINavigationController

Defina o estilo da barra de status no código para o controlador:

Definindo o estilo da barra de status no código

Fawkes
fonte
por favor, explique seu caso e eu vou tentar ajudar
Fawkes
1
Eu tive que adicionar StatusBarIsIntiallyHidden = NO à lista, bem como ViewControllerBasedApplicationStatusBarAppearnce = NO à lista. Então isso funciona usando a primeira parte
Michael
Você tinha uma tela de apresentação com a mesma "imagem" que o primeiro controlador de exibição de carregamento? E também, na seção "Informações" do seu destino, você pode tentar configurar a "Ocultar barra de status" como falsa e evitar lidar com o seu .plist. Bandeira "StatusBarIsIntiallyHidden"
Fawkes
Eu não. Está usando o xib padrão gerado.
Michael Michael
Na verdade, encontrei este problema ao criar um projeto fresco no Xcode 7.1 que é por isso que eu pensei que era tão estranho
Michael
10

Simplesmente chamando

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

no

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

método dos meus AppDelegatetrabalhos ótimos para mim no iOS7.

Cagdas Altinkaya
fonte
Uau, muita porcaria aqui, mas esta resposta funcionou para mim. Estou usando o Xcode 6 e o ​​iOS 8 SDK
Ethan Parker
1
Excelente, funciona para mim no iOS 9 comView controller-based status bar appearance = NO
dstudeba 19/10/2015
9

Isso está documentado no Guia de transição da interface do usuário do iOS 7 , que você precisa de um ID de desenvolvedor da Apple para acessar diretamente. O trecho relevante:

Como a barra de status é transparente, a exibição por trás dela é exibida. [...] Use uma UIStatusBarStyleconstante para especificar se o conteúdo da barra de status deve estar escuro ou claro:

UIStatusBarStyleDefaultexibe conteúdo escuro. [...]

UIStatusBarStyleLightContentexibe conteúdo leve. Use quando o conteúdo escuro estiver atrás da barra de status.

Também possivelmente de interesse:

No iOS 7, você pode controlar o estilo da barra de status de um controlador vew individual e alterá-lo enquanto o aplicativo é executado. Para optar por esse comportamento, adicione a UIViewControllerBasedStatusBarAppearancechave ao Info.plistarquivo de um aplicativo e atribua o valor a ele YES.

Definitivamente, recomendo dar uma olhada no documento, que você pode acessar novamente com o seu ID de desenvolvedor da Apple.

Aaron Miller
fonte
3
Eu já tentei [aplicativo setStatusBarStyle: UIStatusBarStyleLightContent]; Mas na verdade nada muda, cor do texto ainda é preto
Oleksandr Veremchuk
Eu adoraria ter mais ajuda, mas, como eu disse, não estou familiarizado o suficiente com o processo de desenvolvimento do iOS para saber o que sugerir. Desculpa!
Aaron Miller
1) defina o UIViewControllerBasedStatusBarAppearance como YES no plist 2) em viewDidLoad faça um [self setNeedsStatusBarAppearanceUpdate]; 3) adicione o seguinte método :-( UIStatusBarStyle) preferidoStatusBarStyle {return UIStatusBarStyleLightContent; }
Peter B. Kramer
9

Aqui estão as diretrizes / instruções da Apple sobre alterações na 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ê quiser estilo barra de status set, nível de aplicação, em seguida, definir UIViewControllerBasedStatusBarAppearancea NOem seu arquivo `.plist'.

se você deseja definir o estilo da barra de status, no nível do controlador de exibição, siga estas etapas:

  1. Defina UIViewControllerBasedStatusBarAppearancecomo YESno .plistarquivo, se você precisar definir o estilo da barra de status apenas no nível UIViewController.
  2. Na função de adição viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. substitua o preferidoStatusBarStyle no seu controlador de exibição.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Defina o valor de .plist de acordo com o nível de configuração do estilo da barra de status. insira a descrição da imagem aqui


Aqui está um truque hacky para alterar / definir a cor de fundo da barra de status durante o lançamento do aplicativo ou durante o viewDidLoad do seu controlador de exibiçã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:

insira a descrição da imagem aqui

Krunal
fonte
8

Eu fiz algumas coisas diferentes e funciona para mim.

Sem alterações no código, configurei meu arquivo .plist assim:

  • Exibir aparência da barra de status baseada em controlador> NÃO
  • Estilo da barra de status> UIStatusBarStyleLightContent (sequência simples)

Espero que ajude.

editar

Para cada controlador de exibição, altero a propriedade Métricas simuladas da "barra de status", no storyboard, de "inferido" para "Conteúdo claro"

Felipe Antonio Cardoso
fonte
8

Se você deseja o mesmo resultado com o Swift, pode usar este código no seu arquivo AppDelegate.swift:

UINavigationBar.appearance().barStyle = .BlackTranslucent

E o texto da sua barra de status ficará em branco :-)!

fraxool
fonte
8

Se você ainda deseja usar View controller-based status bar appearanceno info.plist definido como YES, o que significa que você pode alterar a barra de status para cada controlador de exibição, use o seguinte para texto em branco na barra de status em ViewDidLoad:

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
eirik
fonte
Barra de navegação! = Barra de status.
Michael Peterson
... Você tentou !? (E sim, para a barra de status)
Eirik
7

No Plist, adicione este:

  • Estilo da barra de status: UIStatusBarStyleLightContent
  • Exibir a aparência da barra de status baseada no controlador: NO
Ramdhas
fonte
7

em info.plist, defina o valor do campo NÃO Veja a aparência da barra de status baseada no controlador e defina a luz de estilo da barra de status em target> general setting.

parvind
fonte
2
vencedor vencedor jantar de frango
tommybananas
7

Deixe-me dar uma resposta completa à sua pergunta. Alterar a cor do texto da barra de status é muito fácil, mas é um pouco confuso no iOS 7, especialmente para iniciantes.

Se você estiver tentando alterar a cor de preto para branco no Storyboard, selecionando o controlador de exibição e indo para Métricas simuladas no lado direito, ele não funcionará e não sei por que. Deve funcionar mudando assim, mas de qualquer maneira.

Em segundo lugar, você não encontrará a propriedade UIViewControllerBasedStatusBarAppearance no seu plist, mas, por padrão, não está lá. Você deve adicioná-lo clicando no botão + e depois configurá-lo para NÃO.

cor do texto da barra de status do ios 7

Por fim, você precisa acessar o arquivo AppDelegate.m e adicionar o seguinte no método didFinishLaunchingWithOptions, adicione a seguinte linha:

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Isso mudará a cor para branco para todos os seus controladores de exibição. Espero que isto ajude!

Amit Shelgaonkar
fonte
Este método foi descontinuado no iOS 9
Trung Bui