Depois de ler todas as sugestões e experimentar algumas coisas, consegui que isso funcionasse para controladores de exibição específicos usando as seguintes etapas:
Primeiro passo:
Abra seu info.plist e insira uma nova chave denominada " Exibir aparência da barra de status baseada em controlador " para NÃO
Segundo passo (apenas uma explicação, não é necessário implementar isso):
Normalmente, colocamos o seguinte código no método application (_: didFinishLaunchingWithOptions :) do AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
mas isso afeta statusBarStyle
todos os ViewControllers.
Então, como fazer isso funcionar para ViewControllers específicos - Etapa final:
Abra o arquivo viewcontroller no qual deseja alterar statusBarStyle
e insira o seguinte código viewWillAppear()
,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
Além disso, implemente o viewWillDisappear()
método para esse viewController específico e coloque as seguintes linhas de código,
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Esta etapa primeiro altera o statusBarStyle
para o viewcontroller específico e depois o altera para default
quando o viewcontroller específico desaparecer. A não implementação da viewWillDisappear()
alteração mudará statusBarStyle
permanentemente para o novo valor definido deUIStatusBarStyle.LightContent
Status bar is initially hidden = YES
no arquivo info.plist, "Exibir aparência da barra de status com base no controlador = NÃO" fará com que a barra de status fique oculta.UIStatusBarStyle.Default
usarviewWillDisappear()
, deveráviewWillAppear()
inicializá-lo, em vez deviewDidLoad()
... caso contrário, se voltar a essa exibição sem que ela precise ser recarregada, você não verá oStatusBarStyle
que está esperando.UIApplication.shared.statusBarStyle = .lightContent
(Em 20 de setembro de 2019)
Swift 5 , Swift 4.2 , Swift 4
fonte
super.viewWillAppear
Se você é copiar e colar este códigoUIApplication.shared.statusBarStyle = .lightContent
resultados neste aviso do compilador: O setter para 'statusBarStyle' foi preterido no iOS 9.0: Use - [UIViewController preferênciaStatusBarStyle]Eu segui este tutorial e funcionou para mim. No entanto, não tenho certeza se há alguma ressalva.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
comofalse
.AppDelegate.swift
, que contémdidFinishLaunchingWithOptions
, defina a cor desejada.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Atualização Swift 3 *
UIApplication.shared.statusBarStyle = .lightContent
fonte
UIApplication.sharedApplication().statusBarHidden = false
ao AppDelegate.swift didFinishLauchingWithOptionsSolução Swift 4.2 com NavigationController
Primeiro passo:
Abra seu info.plist e insira uma nova chave denominada " Exibir aparência da barra de status baseada no controlador " ou
UIViewControllerBasedStatusBarAppearance
em SIM para permitir que cada VC use sua própria propriedade de status.Segundo passo
Em cada VC, substitua a propriedade preferidaStatusBarStyle como esta:
Último passo
Substitua a propriedade selectedStatusBarStyle na sua classe NavigationController customizada:
fonte
Há um bilhão de respostas aqui, então pensei em por que não adicionar outra na forma de uma extensão (com a ajuda do @ Cœur)
Swift 3
Extensão:
Implementação:
fonte
No seu Info.plist, você precisa definir Visualizar a aparência da barra de status baseada em controlador para qualquer valor.
Se você o definir SIM, deverá substituir a função preferidaStatusBarStyle em cada controlador de exibição.
Se você definir NÃO, poderá definir o estilo no AppDelegate usando
fonte
setStatusBarStyle
foi preterido no iOS 9.0fonte
valueForKey("statusBar")
pode não ser compatível com as diretrizes da AppleSwift 3
Essa é a solução para definir a cor de fundo da barra de status para um controlador de exibição específico.
fonte
SWIFT 2
Consegui alterar com êxito a aparência do plano de fundo da barra de status adicionando o seguinte em meu viewWillAppear:
fonte
Implementar
preferredStatusBarStyle
como você mencionou e chamadaself.setNeedsStatusBarAppearanceUpdate()
emViewDidLoad
e também em Info.plist conjuntoUIViewControllerBasedStatusBarAppearance
paraYES
(éYES
por padrão)Não está claro por que ele não é necessidade working.I para verificar code.One outra sugestão é ir com código de trabalho em
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
e mudar isso para padrão quando você ver se desapareceramviewWillDisappear
.fonte
para swift 3
.plist
AppDelegate.swift
fonte
Na minha situação, uso o storyboard para organizar meus controladores de exibição. Quero alterar todo o estilo da barra de status.
Você pode ver na figura abaixo.
Stars
View Controller é umCPBaseNavigationController
, eCPBaseNavigationController
é subclasse deUINavigationController
.Eu tento fazer os próximos ajustes:
Em
AppDelegate.swift
funcdidFinishLaunchingWithOptions
, adicionemas sem efeito.
No StoryBoard, localize a
Base Tab BarController
(foto acima) .selectAttributes Inspector
, altere oSattus Bar
atributo paraLight Content
.so bad, sem efeito.Última vez que o recebi. No meu controlador de navegação personalizado
CPBaseNavigationController
, adicione funcpreferredStatusBarStyle
Isso funciona bem!
Além disso,
statusBarStyle
obsoleto no 9.0, você pode usar-[UIViewController preferredStatusBarStyle]
.fonte
Funciona para aplicativos baseados em navegação
fonte
Tudo é muito mais fácil no Swift 3.0 Xcode 8
Usando o código abaixo no arquivo App Delegate, após
insira isto:
fonte
Swift 3
fonte
Swift 4 Para o ViewController específico sem o NavigationViewController incorporado, basta adicioná-lo ao seu arquivo ViewController.
fonte
Outra maneira realmente fácil de fazer isso funcionar é apenas criar uma extensão da classe UINavigationController.
Como substituir o
preferredStatusBarStyle:
método não funcionará, a menos que o façamos dentro da classe UINavigationController.fonte
Eu havia definido uma cor específica (no formato RGB) usando o código abaixo no
App Delegate
arquivo:Você também precisa adicionar a chave abaixo no
Info.plist
arquivo:Visualizar a aparência da barra de status baseada no controlador com o valor booleano definido como NO
fonte
Eu posso sugerir uma maneira mais simples,
Funcionou para mim no iOS 10.1.
Objetivo C
Rápido
Estou surpreso que ninguém tenha apontado isso. De qualquer forma, aproveite :)
fonte
Eu tive alguns problemas com este. Eu realmente não me senti bem em alterar globalmente a cor da barra de status na exibição e, em seguida, alterá-la novamente na exibição desapareceu como a resposta aceita. Acredite ou não, você pode conseguir isso substituindo o
preferredStatusBarStyle
seu controlador de exibição desejado. Depois de muito tempo, foi o que fiz para fazê-lo funcionar:info.plist
YES.preferredStatusBarStyle
.modalPresentationCapturesStatusBarAppearance
Sim.Além disso, se você tiver controladores de exibição incorporados, como em um controlador de navegação, por exemplo, ele solicitará ao controlador de exibição mais superior o estilo da barra de status. Substituir
childViewControllerForStatusBarStyle
e passar o controlador de exibição incorporado deve funcionar, mas não funcionou para mim. Acabei de retornar a barra de status preferida dos controladores de exibição incorporada como o estilo preferido da barra de status. Algo assim:fonte
UINavigationController
e substituir ochildViewControllerForStatusBarStyle
var lá, retornandoself.topViewController
.No Swift 4 ou 4.2
Você pode adicionar no seu vc
e defina o valor de retorno como
ex:
fonte
(Em 10 de junho de 2020)
Swift 5 ( sem editar
.Plist
arquivo )Se você estiver usando
Storyboard
, vá paraNavigationController
, selecione onavigationBar
, clique no eAttributes Inspector
, em seguida, altere ostyle
. se você precisarlight content
( barra de status branca ), defina qualquer coisa, excetodefault
digamos definir estiloblack
E se você quiserdark content
( barra de status preta ), configure-adefault
.O padrão (
UIBarStyleDefault
) resulta naUIStatusBarStyleDefault
barra de status escura do primeiro plano . EUIBarStyleBlack
dará umaUIStatusBarStyleLightContent
barra de status.Programaticamente
Sem barra de navegação ( Editar
.Plist
)adicione
UIViewControllerBasedStatusBarAppearance
/View controller-based status bar appearance
ao seuinfo.plist
e defina o valor étrue
.Override
apreferredStatusBarStyle
propriedade no seu Controllerfonte
Atualização do Swift 3.0
fonte
O que funcionou comigo, no Storyboard, vá para o Navigation Controller, selecione a barra de navegação, clique no Attributes Inspector e mude o estilo de padrão para preto. É isso aí!
fonte
SWIFT 4.2 Ei, eu queria compartilhar uma solução, que funcionou para mim, que recebi de um ótimo artigo sobre esse assunto indescritível de Graig Grummitt.
Etapa 1 Como outros usuários mencionaram ADICIONAR abaixo ao seu PLIST
Etapa 2 no RootViewcontroller adicione abaixo
Ao atualizar uma propriedade
statusBarHidden
ouvcStatusBarStyle
ela chamarásetNeedsStatusBarAppearanceUpdate()
e atualizará a barra de status com os novos valores paraprefersStatusBarHidden
oupreferredStatusBarStyle
. Na minha situação, eu tive que atualizar essas propriedades para o container viewcontroller, que era o pai do childviewcontroller visível. Eu fiz isso usando um método delegado simples.É claro que ao instanciar o childViewController (Visible VC), não se esqueça de definir o MainViewcontroller (Container VC) como seu representante. Às vezes eu faço. :)
Então, no childViewController, chamei o método delegate quando necessário para atualizar a barra de status.
Como mencionado acima, Graig Grummitt entra em mais detalhes sobre essa solução e também trabalha com os UINavigationControllers. Link aqui: O Caso Misterioso da Barra de Status
fonte
Clique no grupo Arquivos de Suporte (lado superior esquerdo do nome do seu projeto). Navegue para Informações. Clique em + em algum lugar entre as listas, como abaixo do nome do pacote. E adicione "Exibir aparência da barra de status baseada no controlador" e defina-o como NÃO. Em seguida, abra AppDelegate.swift e modifique assim:
É isso aí.
fonte
Para o Xcode 10, você pode criar uma classe e colocá-la antes da classe viewController, você pode chamar essa classe em todos os controladores de exibição necessários, uma barra de status de conteúdo leve ...
Agora mude sua classe viewController em:
E isso é tudo...
fonte
Funciona para navegação com base em um controlador de exibição específico no swift4
fonte
AVISO
O setter para 'statusBarStyle' foi descontinuado no iOS 9.0: Use - [UIViewController preferênciaStatusBarStyle]
então minha solução foi a seguinte: fazer uma extensão do controlador de navegação:
e se você tiver um viewController que terá outro estilo que não o estilo do aplicativo, poderá fazer isso
digamos que você é o estilo de status do aplicativo
.default
e deseja que essa tela seja.lightContent
assim, barStyle assumirá o.lightContent
valor padrão, isso mudará o estilo da barra de status para lightContent e certifique-se deviewWillDisappear
alterar novamente o barStyle para o estilo da barra de status do aplicativo que no nosso caso é.default
.isso é funciona para mim
fonte
Cor personalizada para a barra de status (iOS11 +, Swift4 +)
Se você está procurando uma solução, como alterar a barra de status para sua cor personalizada, essa é a solução que está funcionando.
fonte