web-dev-qa-db-fra.com

Style de barre d'état iOS 13

Je veux changer le style de la barre d'état au niveau par ViewController sur iOS 13. Jusqu'à présent, je n'ai pas eu de chance.
Je définis UIUserInterfaceStyle comme Light dans info.plist (car je ne veux pas prendre en charge le mode sombre) et je règle UIViewControllerBasedStatusBarAppearance sur true . preferredStatusBarStyle est appelé sur mon ViewController mais complètement ignoré. Le UIUserInterfaceStyle semble toujours remplacer les préférences VC. Comment puis-je faire fonctionner le style de la barre d'état par ViewController sur iOS 13? Ou n'est-il plus pris en charge?

17
Micky

iOS 13.2, Swift 5.1

Pour moi, rien n'a fonctionné des solutions mentionnées précédemment. Après 5 heures, je me suis retrouvé sur modalPresentationCapturesStatusBarAppearance flag.

    destinationNavigationController.modalPresentationCapturesStatusBarAppearance = true
    sourceViewController.present(destinationNavigationController, animated: animated, completion: nil)

Après ce preferredStatusBarStyle a été appelé présenté VC.

override var preferredStatusBarStyle: UIStatusBarStyle {
    if #available(iOS 13.0, *) {
        if traitCollection.userInterfaceStyle == .light {
            return .darkContent
        } else {
            return .lightContent
        }
    } else {
        return .lightContent
    }
}
5
bezoadam

Dans iOS13, il existe désormais une option .darkContent pour UIStatusBarStyle. Pour le texte noir, utilisez ceci (au lieu de .default) pour PreferredStatusBarStyle.

3
Harris

J'ai eu le même problème sur iOS13 alors qu'il allait bien sur iOS12 pour mon application. J'ai un TabBarController qui contient 3 NavigationBarControllers, et je présente TabBarController à partir d'un ViewController précédent. Je l'ai corrigé en définissant .modalPresentationStyle sur .fullScreen lors de la présentation:

tabbarController.modalPresentationStyle = .fullScreen

Peut-être que cela vous aidera en quelque sorte ...

2
Volodymyr Davydenko

Dans mon cas, j'ai eu un problème similaire avec un UIStatusBarStyle incorrect. Pour certains contrôleurs de vue dans mon application, je dois définir un style de barre d'état sombre en ignorant le mode de couleur système actuel. Le problème était que j'ai utilisé .default valeur, mais dans iOS 13, cela change en fonction du contexte. C'est pourquoi j'ai ajouté une petite solution de contournement pour gérer les cas iOS 12 et iOS 13+.

private extension UIStatusBarStyle {

    static var darkContentWorkaround: UIStatusBarStyle {
        if #available(iOS 13.0, *) {
            return .darkContent
        } else {
            return .default
        }
    }

}
1

j'ai eu le même problème sur iOS 13 lors de l'utilisation du contrôleur de navigation j'ai pu changer la couleur de la barre d'état en utilisant

let navBarAppearance = UINavigationBarAppearance ()

navigationBar.scrollEdgeAppearance = navBarAppearance

mais le problème était quand j'utilisais le contrôleur actuel, la barre d'état n'a pas changé j'ai utilisé ce code sur le contrôleur de vue de dessus

remplacer 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"

0
Dante