Alterando a cor da barra de status para ViewControllers específicos usando Swift no iOS8


190
override func preferredStatusBarStyle() -> UIStatusBarStyle {
 return UIStatusBarStyle.LightContent;
}

Usar o código acima em qualquer ViewController para definir a cor statusBar como White para um viewcontroller específico não funciona no iOS8 para mim . Alguma sugestão? Usando o método UIApplication.sharedApplication, a cor muda após as alterações necessárias no Info.plist para todo o aplicativo.

// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent

Como posso fazer alterações na cor da barra de status para alguns ViewControllers necessários e específicos ?

Respostas:


348

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 statusBarStyletodos os ViewControllers.

Então, como fazer isso funcionar para ViewControllers específicos - Etapa final:

Abra o arquivo viewcontroller no qual deseja alterar statusBarStylee 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 statusBarStylepara o viewcontroller específico e depois o altera para defaultquando o viewcontroller específico desaparecer. A não implementação da viewWillDisappear()alteração mudará statusBarStylepermanentemente para o novo valor definido deUIStatusBarStyle.LightContent


4
Observe que, se você definir Status bar is initially hidden = YESno 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.
xi.lin 20/08/2015

13
Se você voltar a UIStatusBarStyle.Defaultusar viewWillDisappear(), deverá viewWillAppear()inicializá-lo, em vez de viewDidLoad()... caso contrário, se voltar a essa exibição sem que ela precise ser recarregada, você não verá o StatusBarStyleque está esperando.
William GP

7
Para Swift 3: UIApplication.shared.statusBarStyle = .lightContent
ibrahimyilmaz

4
Ainda não está claro como você mudar a cor da barra de status
DoruChidean

4
Pessoal, o seu descontinuado do iOS 9
#

108

(Em 20 de setembro de 2019)

Swift 5 , Swift 4.2 , Swift 4

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    .lightContent
}

7
Certifique-se chamar super.viewWillAppearSe você é copiar e colar este código
Stephen Silber

Editado para incluído super.viewWillAppear (). Obrigado @StephenSilber pela dica!
BennyTheNerd 5/05

você precisa substituir o preferidoStatusStyle ou ele não funcionará. Obrigado por apontar isso. +1
Alix

3
Usando UIApplication.shared.statusBarStyle = .lightContentresultados neste aviso do compilador: O setter para 'statusBarStyle' foi preterido no iOS 9.0: Use - [UIViewController preferênciaStatusBarStyle]
airowe

3
No Info.plist do seu aplicativo, defina "Exibir aparência da barra de status baseada em controlador" como YES
IvanPavliuk

29

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

  • Abra seu info.plist e defina UIViewControllerBasedStatusBarAppearancecomo false.
  • Na primeira função em AppDelegate.swift, que contém didFinishLaunchingWithOptions, defina a cor desejada.

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

  • Atualização Swift 3 *

    UIApplication.shared.statusBarStyle = .lightContent


11
como é que específico para cada controlador de vista
Yarneo

4
Exatamente, isso é para o aplicativo completo, e essa não é a questão.
anuj

3
Estou usando o iOS 8 Swift e o xCode 6.1.1 e apenas seguir estas duas etapas não funciona. Você também precisa adicionar UIApplication.sharedApplication().statusBarHidden = falseao AppDelegate.swift didFinishLauchingWithOptions
Ahmad Amin

Isso configurou para todo o aplicativo. Para controladores de exibição específicos, consulte a primeira resposta. Funcionou para mim.
Akshar Patel

O setter para 'statusBarStyle' foi descontinuado no iOS 9.0: Use - [UIViewController preferênciaStatusBarStyle]
Oleksandr

29

Soluçã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 UIViewControllerBasedStatusBarAppearanceem SIM para permitir que cada VC use sua própria propriedade de status.

Segundo passo

Em cada VC, substitua a propriedade preferidaStatusBarStyle como esta:

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent //.default for black style
}

Último passo

Substitua a propriedade selectedStatusBarStyle na sua classe NavigationController customizada:

class NavigationController : UINavigationController {

override var preferredStatusBarStyle : UIStatusBarStyle {

    if let topVC = viewControllers.last {
        //return the status property of each VC, look at step 2
        return topVC.preferredStatusBarStyle  
    }

    return .default
}

Esta é apenas a maneira de obter o resultado esperado usando o Navigation Controller e seus próprios controladores. Além disso, você poderia fazer desta forma para prefersStatusBarHidden como eu fiz para o meu projeto :)
atereshkov

22

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:

extension UIApplication {
    class var statusBarBackgroundColor: UIColor? {
        get {
            return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
        } set {
            (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
        }
    }
}

Implementação:

UIApplication.statusBarBackgroundColor = .blue

2
Observe que essa abordagem pode ser considerada como acessar uma API privada e pode significar que seu aplicativo será rejeitado pela Apple.
JWhitey

Ou pelo menos depende dos detalhes de implementação da Apple e pode ser interrompido sem aviso prévio com alterações no iOS.
Chris Prince

19

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

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

7
setStatusBarStylefoi preterido no iOS 9.0
Jeffrey Neo

@ Jeffrey_Neo Embora isso seja verdade, não consigo fazer a substituição funcionar. Seria útil ver seu comentário como uma resposta com o código de trabalho.
dumbledad

15
override func viewWillAppear(animated: Bool) {
    self.navigationController?.navigationBarHidden =  true

    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
    if statusBar.respondsToSelector("setBackgroundColor:") {
        statusBar.backgroundColor = UIColor.redColor()
    }

}

usando valueForKey("statusBar")pode não ser compatível com as diretrizes da Apple
Cœur

15

Swift 3

let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
  statusBar.backgroundColor = UIColor.black
} 

Essa é a solução para definir a cor de fundo da barra de status para um controlador de exibição específico.


3
O UIView sempre responde ao backgroundColor no Swift.
Cœur

13

SWIFT 2

Consegui alterar com êxito a aparência do plano de fundo da barra de status adicionando o seguinte em meu viewWillAppear:

let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView

    if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
        statusBar.backgroundColor = .redColor()
    }

10

Implementar preferredStatusBarStylecomo você mencionou e chamada self.setNeedsStatusBarAppearanceUpdate()em ViewDidLoade também em Info.plist conjunto UIViewControllerBasedStatusBarAppearancepara YESYESpor 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 = .LightContente mudar isso para padrão quando você ver se desapareceram viewWillDisappear.


Apenas implementar a primeira parte da resposta funcionou para mim. No entanto, eu não adicionei o UIViewcontrollerBasedStatusBarAppearance no Info.plist. Ainda funcionou.
Akshar Patel

10

para swift 3

.plist

View controller-based status bar appearance = NO

AppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Custom statubar
        UIApplication.shared.isStatusBarHidden = false
        UIApplication.shared.statusBarStyle = .lightContent
        let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
        statusBar.backgroundColor = UIColor.gray

        return true
    }

1
Eu tentei todas as soluções ... isso só funcionou para mim !! Não sei porquê: D
Khaled Hayek

sorte do empate
Giang

O setter para 'isStatusBarHidden' foi descontinuado no iOS 9.0: Use - [UIViewController prefereStatusBarHidden] ...
empatou ..

9

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.

insira a descrição da imagem aqui

StarsView Controller é um CPBaseNavigationController, e CPBaseNavigationControlleré subclasse deUINavigationController .

Eu tento fazer os próximos ajustes:

  1. Em AppDelegate.swiftfunc didFinishLaunchingWithOptions, adicione

    //change status bar color
    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    mas sem efeito.

  2. No StoryBoard, localize a Base Tab BarController(foto acima) .select Attributes Inspector, altere o Sattus Baratributo para Light Content.so bad, sem efeito.

insira a descrição da imagem aqui

  1. Última vez que o recebi. No meu controlador de navegação personalizado CPBaseNavigationController, adicione funcpreferredStatusBarStyle

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
       return .LightContent
    }

    Isso funciona bem!

Além disso, statusBarStyleobsoleto no 9.0, você pode usar -[UIViewController preferredStatusBarStyle].


9

Funciona para aplicativos baseados em navegação

    var addStatusBar = UIView()
    addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
    addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
    self.window?.rootViewController?.view .addSubview(addStatusBar)

Onde adicionar esse código específico, não foi possível fazê-lo funcionar.
Anuj

Você pode adicioná-lo no arquivo delegado do aplicativo em didFinishLaunchingWithOptions
Jio

1
Não seria melhor usar addStatusBar.frame = CGRectMake (0, 0, UIScreen.mainScreen (). Bounds.width, 20) em vez da largura 320 codificada?
Torsten Ojaperv

Editado @TorstenOjaperv
Jio

Como fazer isso com o Swift 3.0?
YETI

8

Tudo é muito mais fácil no Swift 3.0 Xcode 8

Usando o código abaixo no arquivo App Delegate, após

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

insira isto:

UINavigationBar.appearance().barStyle = .black

UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)

1
Os valores vermelho, verde e azul estão no intervalo de 0 a 1. Você precisa dividi-los por 255 ou isso não funcionará.
precisa saber é o seguinte

8

Swift 3

//
//  LoginController.swift
//  Swift 3
//
//  Created by The Crab on 17/01/2017.
//  Copyright © 2017 Paxi Labs. All rights reserved.
//

import UIKit

class LoginController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)

    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

7

Swift 4 Para o ViewController específico sem o NavigationViewController incorporado, basta adicioná-lo ao seu arquivo ViewController.

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

Se temos um controlador de navegação incorporado, o que você faz?
Icekomo # 13/18

7

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.

    extension UINavigationController {
        open override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }
    }

4

Eu havia definido uma cor específica (no formato RGB) usando o código abaixo no App Delegatearquivo:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
. . .

 UIApplication.sharedApplication().statusBarHidden = false
        UIApplication.sharedApplication().statusBarStyle = .LightContent

        let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
        if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
            statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
        }

. . .
}

Você também precisa adicionar a chave abaixo no Info.plistarquivo:

Visualizar a aparência da barra de status baseada no controlador com o valor booleano definido como NO

Captura de tela 1

Captura de tela 2


Com o Siwft 3.0, como fazer isso?
YETI

4

Eu posso sugerir uma maneira mais simples,

  1. Basta chamar setNeedsStatusBarAppearanceUpdate no viewDidLoad, como diz a documentação da Apple,

Chame esse método se os atributos da barra de status do controlador de exibição, como status ou estilo oculto / não oculto, mudarem. Se você chamar esse método dentro de um bloco de animação, as alterações serão animadas junto com o restante do bloco de animação.

  1. Implemente o preferencialStatusBarStyle retornando seu tipo preferido.

Funcionou para mim no iOS 10.1.

Objetivo C

[self setNeedsStatusBarAppearanceUpdate];

-(UIStatusBarStyle)preferredStatusBarStyle {
     return UIStatusBarStyleLightContent;
}

Rápido

setNeedsStatusBarAppearanceUpdate()

var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent
}

Estou surpreso que ninguém tenha apontado isso. De qualquer forma, aproveite :)


4

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 preferredStatusBarStyleseu controlador de exibição desejado. Depois de muito tempo, foi o que fiz para fazê-lo funcionar:

  1. Altere Visualizar aparência da barra de status baseada no controlador em info.plistYES.
  2. Agora qualquer controlador de exibição em tela cheia pode alterar o estilo da barra de status substituindo preferredStatusBarStyle.
  3. Eu especifiquei tela cheia porque isso não funcionará para controladores de exibição modal (tela não cheia), não sem definir modal​Presentation​Captures​Status​Bar​AppearanceSim.
  4. 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 child​View​Controller​For​Status​Bar​Stylee 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:

    override var preferredStatusBarStyle: UIStatusBarStyle {
         if let topViewController = viewControllers.last {
             return topViewController.preferredStatusBarStyle
         }
    
         return .default
    }

Esta resposta me ajudou! Descobri que, por algum motivo, meu controlador de navegação (sendo apresentado de forma modal) não estava pedindo implicitamente ao controlador de exibição mais superior o estilo da barra de status. Então eu tive que subclassear UINavigationControllere substituir o child​View​Controller​For​Status​Bar​Stylevar lá, retornando self.topViewController.
Taber

3

No Swift 4 ou 4.2

Você pode adicionar no seu vc

preferidoStatusBarStyle

e defina o valor de retorno como

.lightContent ou .default

ex:

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}

3

(Em 10 de junho de 2020)

Swift 5 ( sem editar .Plistarquivo )

Se você estiver usando Storyboard, vá para NavigationController, selecione o navigationBar, clique no e Attributes Inspector, em seguida, altere o style. se você precisar light content( barra de status branca ), defina qualquer coisa, exceto defaultdigamos definir estilo blackE se você quiser dark content ( barra de status preta ), configure-adefault .

O padrão ( UIBarStyleDefault) resulta na UIStatusBarStyleDefaultbarra de status escura do primeiro plano . E UIBarStyleBlackdará uma UIStatusBarStyleLightContentbarra de status.

Programaticamente

let nav = UINavigationController(rootViewController: rootViewController)

    nav.navigationBar.barStyle = .default //gives you dark Content status bar

    nav.navigationBar.barStyle = .black  //gives you light content status bar

Sem barra de navegação ( Editar.Plist )

adicione UIViewControllerBasedStatusBarAppearance/ View controller-based status bar appearanceao seu info.pliste defina o valor é true.

Overridea preferredStatusBarStylepropriedade no seu Controller

class ViewController: UIViewController {
    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
}

2

Atualização do Swift 3.0

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        UIApplication.shared.statusBarStyle = .lightContent

        return true
    }

2

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í!


2

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

View controller-based status bar appearance YES

Etapa 2 no RootViewcontroller adicione abaixo

var statusBarHidden: Bool = false {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var prefersStatusBarHidden: Bool {
        return statusBarHidden
    }

    var vcStatusBarStyle: UIStatusBarStyle = .default {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return vcStatusbarStyle
    }

Ao atualizar uma propriedade statusBarHiddenou vcStatusBarStyleela chamará setNeedsStatusBarAppearanceUpdate()e atualizará a barra de status com os novos valores para prefersStatusBarHiddenou preferredStatusBarStyle. 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.

protocol MainViewControllerDelegate {
    func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
    func toggleStatusBar(visable: Bool)
}

É 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. :)

childViewController.delegate = self

Então, no childViewController, chamei o método delegate quando necessário para atualizar a barra de status.

self.delegate?.updateStatusBarStyle(statBarStayle: .default)

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


1

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:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

return true
}

É isso aí.


Você leu a pergunta errado. Perguntei sobre como alterar o StatusBarStyle para controladores de exibição específicos, não para o aplicativo completo.
anuj

Veja minha resposta abaixo @Anuj
theCrab 17/17/17

1

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 ...

class UIViewControllerWithLightStatusBar: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
}

Agora mude sua classe viewController em:

class YourViewController: UIViewControllerWithLightStatusBar {
...
}

E isso é tudo...


1

Funciona para navegação com base em um controlador de exibição específico no swift4

   let app = UIApplication.shared
   let statusBarHeight: CGFloat = app.statusBarFrame.size.height

   let statusbarView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: statusBarHeight))
   statusbarView.backgroundColor = UIColor.red
   view.addSubview(statusbarView)

1

AVISO


O setter para 'statusBarStyle' foi descontinuado no iOS 9.0: Use - [UIViewController preferênciaStatusBarStyle]

UIApplication.shared.statusBarStyle = .default

então minha solução foi a seguinte: fazer uma extensão do controlador de navegação:

extension UINavigationController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
        if let topViewController = presentedViewController{
            return topViewController.preferredStatusBarStyle
        }
        if let topViewController = viewControllers.last {
            return topViewController.preferredStatusBarStyle
        }

        return .default
    }
}

e se você tiver um viewController que terá outro estilo que não o estilo do aplicativo, poderá fazer isso

var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
    return barStyle
}

digamos que você é o estilo de status do aplicativo .defaulte deseja que essa tela seja .lightContent assim, barStyle assumirá o .lightContentvalor padrão, isso mudará o estilo da barra de status para lightContent e certifique-se de viewWillDisappearalterar novamente o barStyle para o estilo da barra de status do aplicativo que no nosso caso é .default.

isso é funciona para mim


1

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.

let statusBarView = UIView()
view.addSubview(statusBarView)
statusBarView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
    statusBarView.leftAnchor.constraint(equalTo: view.leftAnchor),
    statusBarView.rightAnchor.constraint(equalTo: view.rightAnchor),
    statusBarView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
])
statusBarView.backgroundColor = .blue
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.