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.
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
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
}
}
let appearance = UINavigationBarAppearance()
appearance.backgroundColor = .blue
self.navigationController?.navigationBar.scrollEdgeAppearance = appearance
J'espère que cela t'aidera.
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)
}
}
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
}