web-dev-qa-db-fra.com

setStatusBarHidden est déconseillé dans iOS 9.0

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?

39
iOS_programmer

Ajoutez le code ci-dessous à votre contrôleur de vue.

 - (BOOL)prefersStatusBarHidden {

   return NO;
}

Remarque:

  • Si vous modifiez la valeur de retour de cette méthode, appelez la méthode setNeedsStatusBarAppearanceUpdate.
  • Pour childViewController, 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.
50
Nilesh Patel

prefersStatusBarHidden est disponible depuis iOS 7+.

Utilisez ceci dans votre classe UIViewController

   var isHidden = true{
        didSet{
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
    override var prefersStatusBarHidden: Bool {
        return isHidden
    }

enter image description here

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.

5
Jack

vous devez ajouter une méthode dans yourViewController.m

- (BOOL)prefersStatusBarHidden {

   return NO;
}
4
Gaurav Patel

Swift 3 avec Xcode 8.3.3

1) Ajoutez une ligne dans votre Info.plist. enter image description here

2) Dans votre remplacement ViewController ViewDidLoad (), ajoutez:

 UIApplication.shared.isStatusBarHidden = true
2
Satnam Sync

Swift 3.1 Xcode 8.2.1

  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

  2. Dans vos paramètres cibles, cochez "Masquer la barre d'état"

Les deux étapes sont nécessaires

2
Adam Smaka

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() {}
}

Usage

  • en fonction de lancement

UIViewController.swizzleStatusBarHiddenPropertyForViewController ()

  • pour masquer/afficher statusBar, dans UIViewController

. self.setStatusBar (caché: vrai/faux)

1
Jay Choi