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 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 tombé sur différentes propositions comme utiliser le StatusBarView UIApplications (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.
10 Réponses :
let appearance = UINavigationBarAppearance() appearance.backgroundColor = .blue self.navigationController?.navigationBar.scrollEdgeAppearance = appearance I hope, this will help you.
non cela n'a pas aidé que la couleur de NavigationBar fixe seulement pas la couleur de la barre d'état
if let statusBar = UIStatusBarManager.self as? UIView { if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) { statusBar.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) } } I hope this works for you
J'ai besoin en obj c pas rapide
Pour autant que je sache, il n'y a actuellement aucun moyen de le faire dans Objective-C @Vinodh
La conversion de 'UIStatusBarManager.Type' vers un type non lié 'UIView' échoue toujours
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 }
non cela n'a pas aidé que la couleur de NavigationBar fixe seulement pas la couleur de la barre d'état
Vous pouvez simplement définir la couleur d'arrière-plan de la vue de base dans votre ViewController si vous n'utilisez pas NavigationController
view.backgroundColor = .blue
Version Objective-C utilisant UIStatusBarManager:
UIView *statusBar = [[UIView alloc]initWithFrame:[UIApplication sharedApplication].keyWindow.windowScene.statusBarManager.statusBarFrame] ; statusBar.backgroundColor = [UIColor whiteColor]; [[UIApplication sharedApplication].keyWindow addSubview:statusBar]
si vous avez une barre de navigation
webView.scrollView.backgroundColor = 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
self.navigationBar.barTintColor = UIColor.blue or UINavigationBar.appearance().barTintColor = UIColor.blue
il y a probablement plus de cas qui me manquent
Appelez ceci 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) } }
Utilisez ceci sur votre ViewController préféré
override func viewDidAppear(_ animated: Bool) { if #available(iOS 13, *) { let statusBar = UIView(frame: (UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame)!) statusBar.backgroundColor = UIColor.systemBackground UIApplication.shared.keyWindow?.addSubview(statusBar) } }
vous pouvez utiliser votre couleur dans "UIColor.systemBackground"
Avons-nous besoin d'ajouter ceci à chaque ViewController? Et si nous voulons jouer dans toute l'application.
Ne fonctionne pas car 'keyWindow' est obsolète dans iOS 13.0: ne doit pas être utilisé pour les applications qui prennent en charge plusieurs scènes car il renvoie une fenêtre clé sur toutes les scènes connectées
Comment supprimer la statusBar lorsque viewWillDisappear () est appelé?
J'utilisais la classe centrale ThemeManager où je définissais toutes les couleurs de l'interface utilisateur. Voilà comment je l'ai résolu. Vous pouvez prendre des éléments 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 } }
Vous devez mettre cela dans DispatchQueue
pour fonctionner.
Le code fonctionne pour Swift 5+ et iOS 13+
Pour changer la couleur d'arrière-plan de StatusBar, j'ai créé une classe de base de UIViewController afin que je puisse hériter du même code dans tous les contrôleurs de vue.
Ajout de "statusBarColorChange ()" à l'extension UIViewController.
class BaseClass: UIViewController { override func viewWillAppear(_ animated: Bool) { self.statusBarColorChange() } } class ChatListViewController: BaseClass {}
Créé la classe de base et hérité dans d'autres classes.
extension UIViewController { func statusBarColorChange() { if #available(iOS 13.0, *) { let statusBar = UIView(frame: UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.zero) statusBar.backgroundColor = .appNavigationThemeColor statusBar.tag = 100 UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.addSubview(statusBar) } else { let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView statusBar?.backgroundColor = .appNavigationThemeColor } } }
L'espoir aidera :)
vérifiez cette réponse stackoverflow.com/a/57152709/8687925 .
Merci @SAXENA - cela semble nécessiter une barre de navigation pour activer l'apparence. Je cherche un moyen sans barre de navigation.
@Nij voyez ceci pour obtenir de l'aide: Comment changer la couleur d'arrière-plan de la barre d'état et la couleur du texte sur iOS 13?