web-dev-qa-db-de.com

setStatusBarHidden ist in iOS 9.0 veraltet

Ich aktualisiere meinen Code von iOS 8 auf iOS 9. Ich habe einen Codeausschnitt in meinem Programm [[UIApplication applicationName] setStatusBarHidden:YES];.

Ich erhalte die Warnung "setStatusBarHidden ist in iOS 9.0 veraltet. Verwenden Sie - [UIViewController prefersStatusBarHidden". Wenn ich 'setStatusBarHidden' nur durch 'prefersStatusBarHidden' ersetze, erhalte ich 'Instanzmethode nicht gefunden'. Kann mir jemand bitte vorschlagen, wie man dieses Problem löst?

39
iOS_programmer

Fügen Sie den folgenden Code zu Ihrem View Controller hinzu.

 - (BOOL)prefersStatusBarHidden {

   return NO;
}

Anmerkung:

  • Wenn Sie den Rückgabewert für diese Methode ändern, rufen Sie die Methode setNeedsStatusBarAppearanceUpdate auf.
  • Implementieren Sie für childViewController die childViewControllerForStatusBarHidden -Methode, um festzulegen, dass ein untergeordneter Ansichtscontroller den verborgenen/nicht verborgenen Status der bevorzugten Statusleiste steuern soll.
50
Nilesh Patel

prefersStatusBarHidden ist ab iOS 7 verfügbar.

Verwenden Sie dies in Ihrer Klasse UIViewController

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

enter image description here

Wenn Sie den Rückgabewert für diese Methode ändern, rufen Sie die Methode setNeedsStatusBarAppearanceUpdate () auf. Implementieren Sie die childViewControllerForStatusBarHidden-Methode, um festzulegen, dass ein untergeordneter Ansichtscontroller den Status der bevorzugten Statusleiste (ausgeblendet/nicht ausgeblendet) steuern soll.

5
Jack

sie müssen Methode in yourViewController.m hinzufügen

- (BOOL)prefersStatusBarHidden {

   return NO;
}
4
Gaurav Patel

Swift 3 mit Xcode 8.3.3

1) Fügen Sie eine Zeile in Ihre Info.plist ein. enter image description here

2) Überschreiben Sie in Ihrem ViewController ViewDidLoad () Folgendes:

 UIApplication.shared.isStatusBarHidden = true
2
Satnam Sync

Swift 3.1 Xcode 8.2.1

  1. Ändern Sie in info.plist die Zeile View controller based status bar look und setzen Sie sie auf NO

  2. Kreuzen Sie in Ihren Zieleinstellungen "Statusleiste ausblenden" an.

Beide Schritte sind erforderlich

2
Adam Smaka

Hier ist mein Swift Code zum Einstellen der Statusleiste versteckt und Stil.

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

Verwendung

  • in Startfunktion

UIViewController.swizzleStatusBarHiddenPropertyForViewController ()

  • für die Statusleiste ausblenden/anzeigen in UIViewController

. self.setStatusBar (versteckt: true/false)

1
Jay Choi