web-dev-qa-db-fra.com

UIApplication.sharedApplication (). SetStatusBarStyle () déconseillé dans iOS 9

J'utilise

UIApplication.sharedApplication().setStatusBarStyle()

Dans mon appDelegate et cela a bien fonctionné, mais depuis iOS 9, cette méthode est obsolète et je ne trouve pas d'alternative.

Je veux changer le style de la barre d'état en .LightContent pour toute mon application, mais la seule suggestion que xCode me donne est de gérer cela dans chaque VC séparément avec;

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}

Quelqu'un at-il une idée de la façon de procéder pour toute l'application?

Merci d'avance

38
Rick

Je pense avoir trouvé une solution. J'ai fini par régler le

View controller-based status bar appearance booléen à NO

Dans mon fichier info.plist.

Info.Plist

Puis je suis allé chez General settings -> Deployment info et a modifié l'option déroulante Status Bar Style à Light au lieu de Default

Change Status Bar Style to Light

Cela a changé le style de la barre d'état en Light pour toute mon application, exactement ce que je voulais.

J'espère que ça aide!

69
Rick

Dans Swift 3 est comme ça:

 UIApplication.shared.statusBarStyle = .lightContent
10
EgzonArifi

Dans Swift 3.

Dans votre contrôleur de vue:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

Si vous souhaitez que l'application lance votre écran de lancement, la barre d'état dans lightContent est également disponible:

enter image description here

8
Marlon Ruiz

Pour mettre à jour dynamiquement IStatusBarStyle sur les contrôleurs de vue, utilisez cette méthode

cela supprimera également l'avertissement obsolète

'setStatusBarStyle:' est déconseillé: d'abord déconseillé dans iOS 9.0 - Utilisation - [UIViewController PreferredStatusBarStyle]

pour appeler

[[UIApplication sharedApplication] setStatusBarStyle:style];

Commençons

Objectif - C

définir tilityFunction

+(void)setStatusBarStyle:(UIStatusBarStyle )style {    
    [[NSUserDefaults standardUserDefaults] setInteger:style forKey:@"UIStatusBarStyle"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

contourner cette méthode dans votre BaseViewController

- (UIStatusBarStyle)preferredStatusBarStyle {
    UIStatusBarStyle style = [[NSUserDefaults standardUserDefaults] integerForKey:@"UIStatusBarStyle"];
    return style;
}

définissez la valeur UIStatusBarStyle pour AnyViewController à l'aide d'une fonction UtilityFunction comme ci-dessous:

[UtilityFunctions setStatusBarStyle:UIStatusBarStyleDefault];

// call below code for preferred style
[self preferredStatusBarStyle];

Swift 4.

définir tilityFunction

class func setPreferedStyle(style:UIStatusBarStyle)->Void {
    UserDefaults.standard.set(style, forKey: "UIStatusBarStyle")
    UserDefaults.standard.synchronize()
}

contourner cette méthode dans votre BaseViewController

override var preferredStatusBarStyle: UIStatusBarStyle {
    if let style: UIStatusBarStyle = UIStatusBarStyle(rawValue:UserDefaults.standard.integer(forKey: "UIStatusBarStyle")) {
        return style
    }
    return UIStatusBarStyle.lightContent
}

définissez la valeur UIStatusBarStyle pour AnyViewController à l'aide d'une fonction UtilityFunction comme ci-dessous:

Utility.setPreferedStyle(style: .lightContent)

// call below code for preferred style
preferredStatusBarStyle()
1
Muhammad Waqas

Cela a bien fonctionné pour moi dans Xcode 7.

Dans AppDelegate:

UIApplication.sharedApplication().statusBarStyle = .LightContent
1
Caleb Kleveter

pour ceux qui travaillent toujours avec Swift 3 dans Xcode 8:

(légèrement différent de la réponse de Marlon Ruiz ci-dessus, pas une fonction de substitution, mais dans viewDidLoad)

override func viewDidLoad() {
    super.viewDidLoad()

    var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}
1
aremvee