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?
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
}
}
Dans iOS13, il existe désormais une option .darkContent pour UIStatusBarStyle. Pour le texte noir, utilisez ceci (au lieu de .default) pour PreferredStatusBarStyle.
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 ...
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
}
}
}
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"