Estou tentando mudar a cor da barra de status em meu aplicativo Swift para branco, mas estou batendo em uma parede de tijolos. Eu tenho 3 ViewControllers que estão cada um embutido em um NavigationController (poderia ser esse o problema? Eu já tentei colocar o código na classe NavigationController.) Eu tentei os dois pedaços de código a seguir no didFinishLaunchingWithOptions do meu AppDelegate arquivo .swift, mas nenhum funcionou.
application.statusBarStyle = .LightContent
e
UIApplication.sharedApplication().statusBarStyle = .LightContent
Tudo o que o Docs tem a dizer sobre isso é que UIBarButtonStyle é um Int e me deu este snippet de enum que não me ajudou em nada com a implementação.
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
o que estou perdendo?
fonte
em AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.shared.statusBarStyle = .lightContent
Info.plist
View controller-based status bar appearance -> NO
em AppDelegate.swift didFinishLaunchingWithOptions
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist
View controller-based status bar appearance -> NO
fonte
Você deve definir o:
navigationController.navigationBar.barStyle = .black
e o texto aparecerá em branco
fonte
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
. Você apenas tem que escrever esta linhaviewDidLoad
para trabalhar bem. Certifique-se de seguirView controller-based status bar appearance = YES
esta solução.Para iOS9.x e Xcode7, basta colocar dentro
AppDelegate.swift
:func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().barStyle = .Black }
Isso mudará automaticamente o estilo da sua barra de status para
.Lightcontent
para todos os controladores de visualização dentro de um UINavigationController.(Além disso, exclua
View controller-based status bar appearance
do Info.plist para suprimir os avisos que você provavelmente está vendo também!)fonte
No Swift 3, o estilo da barra de status mudou para uma propriedade computada em UIViewController que você pode substituir assim:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent //or default }
fonte
No iOS 9, o seguinte (setStatusBarStyle) está obsoleto e você receberá um aviso se for assim.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Se você quiser que todos os statusBars sejam alterados de uma só vez, tente adicionar o seguinte ao seu Info.plist. Isso também deixará a barra de status da tela de inicialização branca. Enquanto o código acima não vai.
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
fonte
para mim, tudo acima não funcionou até eu adicionar:
self.navigationController?.navigationBar.barStyle = .black;
então:
UIViewControllerBasedStatusBarAppearance
paraYES
em.plist
viewDidLoad
chamadaself.setNeedsStatusBarAppearanceUpdate();
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
navigationBar.barStyle
so finalpara o conteúdo de luz :
override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
e para o preto conteúdo de , use o padrão
A fonte daqui e daqui .
e se isso não funcionar, você pode tentar adicionar um
UINavigationController
extension
:extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { if let lastVC = self.viewControllers.last { return lastVC.preferredStatusBarStyle } return .default } }
fonte
Estranho, usando Swift 3.1 e XC8.2.1, mas todas as opções acima não funcionaram.
O que eu fiz é só
extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } } }
Sem Plist, sem outras coisas. HTH
fonte
No Swift 3.0, você pode substituir um getter no ViewController para a aparência da barra de status baseada no controlador do View:
override var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } }
fonte
Não edite seu Info.plist. Adicione isso ao seu ViewController.swift:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
fonte
Etapa 1. Adicionar a info.plist
View controller-based status bar appearance -> NO
Etapa 2. Adicione o código no método em que você precisa alterar a cor da barra de status:
UIApplication.shared.statusBarStyle = .lightContent //(or .default) setNeedsStatusBarAppearanceUpdate()
Linha chave do código:
setNeedsStatusBarAppearanceUpdate()
fonte