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?
Fügen Sie den folgenden Code zu Ihrem View Controller hinzu.
- (BOOL)prefersStatusBarHidden {
return NO;
}
Anmerkung:
setNeedsStatusBarAppearanceUpdate
auf.childViewControllerForStatusBarHidden
-Methode, um festzulegen, dass ein untergeordneter Ansichtscontroller den verborgenen/nicht verborgenen Status der bevorzugten Statusleiste steuern soll.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
}
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.
sie müssen Methode in yourViewController.m hinzufügen
- (BOOL)prefersStatusBarHidden {
return NO;
}
Swift 3.1 Xcode 8.2.1
Ändern Sie in info.plist die Zeile View controller based status bar look und setzen Sie sie auf NO
Kreuzen Sie in Ihren Zieleinstellungen "Statusleiste ausblenden" an.
Beide Schritte sind erforderlich
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() {}
}
UIViewController.swizzleStatusBarHiddenPropertyForViewController ()
. self.setStatusBar (versteckt: true/false)