Je mets à jour mon code d'iOS 8 vers iOS 9. J'ai un extrait de code dans mon programme [[UIApplication applicationName] setStatusBarHidden:YES];
.
Je reçois l'avertissement "setStatusBarHidden est déconseillé dans iOS 9.0, Use - [UIViewController prefersStatusBarHidden". Si je remplace simplement "setStatusBarHidden" par "prefersStatusBarHidden", j'obtiens "méthode d'instance introuvable". Quelqu'un peut-il me suggérer comment résoudre ce problème?
Ajoutez le code ci-dessous à votre contrôleur de vue.
- (BOOL)prefersStatusBarHidden {
return NO;
}
Remarque:
setNeedsStatusBarAppearanceUpdate
.childViewControllerForStatusBarHidden
.prefersStatusBarHidden est disponible depuis iOS 7+.
Utilisez ceci dans votre classe UIViewController
var isHidden = true{
didSet{
self.setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isHidden
}
Si vous modifiez la valeur de retour de cette méthode, appelez la méthode setNeedsStatusBarAppearanceUpdate (). Pour spécifier qu'un contrôleur de vue enfant doit contrôler l'état masqué/non masqué de la barre d'état préférée, implémentez la méthode childViewControllerForStatusBarHidden.
vous devez ajouter une méthode dans yourViewController.m
- (BOOL)prefersStatusBarHidden {
return NO;
}
Swift 3.1 Xcode 8.2.1
Changez dans info.plist la ligne Affichez l'apparence de la barre d'état basée sur le contrôleur et réglez-la sur NO
Dans vos paramètres cibles, cochez "Masquer la barre d'état"
Les deux étapes sont nécessaires
Voici mon Swift code pour définir la barre d'état cachée et le style.
extension UIViewController {
public var privateStatusBarHidden: Bool {
return statusBarHidden
}
public var privateStatusBarStyle: UIStatusBarStyle {
return statusBarStyle
}
public func setStatusBarHidden(hidden: Bool, animated: Bool = false) {
statusBarHidden = hidden
if animated {
UIView.animate(withDuration: 0.25, animations: {
self.setNeedsStatusBarAppearanceUpdate()
})
} else {
self.setNeedsStatusBarAppearanceUpdate()
}
}
public func setStatusBar(style: UIStatusBarStyle) {
statusBarStyle = style
self.setNeedsStatusBarAppearanceUpdate()
}
public static func swizzleStatusBarHiddenPropertyForViewController() {
var original = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.prefersStatusBarHidden))
var changeling = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.privateStatusBarHidden))
method_exchangeImplementations(original, changeling)
original = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.preferredStatusBarStyle))
changeling = class_getInstanceMethod(UIViewController.self, #selector(getter: UIViewController.privateStatusBarStyle))
method_exchangeImplementations(original, changeling)
original = class_getClassMethod(UIViewController.self, #selector(UIViewController.swizzleStatusBarHiddenPropertyForViewController))
changeling = class_getClassMethod(UIViewController.self, #selector(UIViewController.emptyFunction))
method_exchangeImplementations(original, changeling)
}
@objc private static func emptyFunction() {}
}
UIViewController.swizzleStatusBarHiddenPropertyForViewController ()
. self.setStatusBar (caché: vrai/faux)