web-dev-qa-db-fra.com

Modifier la couleur d'arrière-plan de la barre d'état dans iOS 13

Avec iOS13, je ne peux plus changer la couleur d'arrière-plan de la barre d'état car la barre d'état n'est plus accessible en utilisant "valeur pour la clé". Quelqu'un a-t-il compris comment cela est possible ou sait-on que cela sera possible dans la version finale d'iOS13?

Je suis déjà tombé sur différentes propositions, comme utiliser la UIApplications StatusBarView (qui n'est plus accessible dans xcode 11, beta 7) ou utiliser le statusbarmanager. Les deux ne donnent pas accès à la barre d'état.

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

Je m'attends à ce que la barre d'état obtienne la couleur d'arrière-plan dont j'ai besoin.

6
Nij

La barre d'état va essayer de faire correspondre la couleur de l'application

si vous avez une barre de navigation

self.navigationBar.barTintColor = UIColor.blue

or

UINavigationBar.appearance().barTintColor = UIColor.blue

s'il n'y a pas de barre de navigation

view.backgroundColor = UIColor.blue

si votre arrière-plan est une vue Web

webView.scrollView.backgroundColor = UIColor.blue

il y a probablement plus de cas qui me manquent

1
Dug

J'utilisais la classe ThemeManager centrale où je définissais toutes les couleurs de l'interface utilisateur. Voilà comment je l'ai résolu. Vous pouvez prendre des parties de solution qui correspondent à vos besoins:

  let sharedApplication = UIApplication.shared
  sharedApplication.delegate?.window??.tintColor = setYourColor

  if #available(iOS 13.0, *) {
        let statusBar = UIView(frame: (sharedApplication.delegate?.window??.windowScene?.statusBarManager?.statusBarFrame)!)
        statusBar.backgroundColor = setYourColor
        sharedApplication.delegate?.window??.addSubview(statusBar)
    } else {
        // Fallback on earlier versions
        sharedApplication.statusBarView?.backgroundColor = setYourColor
  }



extension UIApplication {

var statusBarView: UIView? {
    return value(forKey: "statusBar") as? UIView
   }
}
0
Mile Dev
 let appearance = UINavigationBarAppearance()
 appearance.backgroundColor = .blue
 self.navigationController?.navigationBar.scrollEdgeAppearance = appearance

J'espère que cela t'aidera.

0
Ajumal

Appelez cela dans votre contrôleur de vue de base

public extension UIViewController {
    func setStatusBar(color: UIColor) {
        let tag = 12321
        if let taggedView = self.view.viewWithTag(tag){
            taggedView.removeFromSuperview()
        }
        let overView = UIView()
        overView.frame = UIApplication.shared.statusBarFrame
        overView.backgroundColor = color
        overView.tag = tag
        self.view.addSubview(overView)
    }
}
0
midhun p

Essaye ça

if #available(iOS 13.0, *) {
    let navBarAppearance = UINavigationBarAppearance()
    navBarAppearance.configureWithOpaqueBackground()
    navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
    navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
    navBarAppearance.backgroundColor = <insert your color here>
    navigationBar.standardAppearance = navBarAppearance
    navigationBar.scrollEdgeAppearance = navBarAppearance
}
0
gihanshox