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?
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?
Respostas:
Defina UIViewControllerBasedStatusBarAppearancecomo YESno arquivo .plist.
No viewDidLoadfazer um[self setNeedsStatusBarAppearanceUpdate];
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())
Como alternativa, você pode desativar a aparência da barra de status baseada no controlador de exibição:
View controller-based status bar appearancecomo NOno seu Info.plist.[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];Nota: Este método foi preterido no iOS9. Use preferredStatusBarStyleno UIViewController. (consulte Apple Developer Library )
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 :
Transparent black style (alpha of 0.5)NONOUIStatusBarStyleLightContentno 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 :)
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
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
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.

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];
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: 
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:
É isso aí.
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];
…
}
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):
Defina the UIViewControllerBasedStatusBarAppearancecomo NOno
Info.plist.
No ViewDidLoadmétodo ou em qualquer lugar, onde você deseja alterar o estilo da barra de status:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Caso seu UIViewController esteja dentro de um UINavigationController, você precisará definir o BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
A resposta original está aqui
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.
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:

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.
Simply In Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Bem, isso está realmente funcionando como um pedaço de bolo para mim.
Vá para o seu aplicativo info.plist.
View controller-based status bar appearancecomoNOStatus bar stylecomoUIStatusBarStyleLightContentEm 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.
View controller-based status bar appearance equalpara NOera a peça que estava faltando. Obrigado
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
}
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 statussetNeedsStatusBarAppearanceUpdate.
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/
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;}
Resposta atualizada para Xcode GM Seed:
Em Info.plistcolocar View controller-based status bar appearancecomoNO
No projeto, defina:

Em ViewDidLoad:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
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

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

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
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:
Simplesmente chamando
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
no
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
método dos meus AppDelegatetrabalhos ótimos para mim no iOS7.
View controller-based status bar appearance = NO
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 aoInfo.plistarquivo de um aplicativo e atribua o valor a eleYES.
Definitivamente, recomendo dar uma olhada no documento, que você pode acessar novamente com o seu ID de desenvolvedor da Apple.
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:
UIViewControllerBasedStatusBarAppearancecomo YESno .plistarquivo, se você precisar definir o estilo da barra de status apenas no nível UIViewController.Na função de adição viewDidLoad - setNeedsStatusBarAppearanceUpdate
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.

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:

Eu fiz algumas coisas diferentes e funciona para mim.
Sem alterações no código, configurei meu arquivo .plist assim:
Espero que ajude.
Para cada controlador de exibição, altero a propriedade Métricas simuladas da "barra de status", no storyboard, de "inferido" para "Conteúdo claro"
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];
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.
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!