SetStatusBarHidden устарел в iOS 9.0
Я обновляю свой код с iOS 8 до iOS 9. У меня есть фрагмент кода в моей программе
[[UIApplication applicationName] setStatusBarHidden:YES];
.
Я получаю предупреждение: setStatusBarHidden устарел в iOS 9.0, Use - [UIViewController prefersStatusBarHidden ". Если я просто заменил" setStatusBarHidden "на" prefersStatusBarHidden ", я получаю" метод экземпляра не найден".
Может кто-нибудь, пожалуйста, предложите мне, как решить эту проблему?
Ответы
Ответ 1
Добавьте код ниже в ваш контроллер просмотра.
- (BOOL)prefersStatusBarHidden {
return NO;
}
Примечание:
- Если вы измените возвращаемое значение для этого метода, вызовите
setNeedsStatusBarAppearanceUpdate
.
- Для childViewController, чтобы указать, что контроллер дочернего представления
должен управлять привилегированным статусом, скрытым/незакрытым состоянием, реализовать
childViewControllerForStatusBarHidden
.
Ответ 2
вам нужно добавить метод в свой viewController.m
- (BOOL)prefersStatusBarHidden {
return NO;
}
Ответ 3
Swift 3.1 Xcode 8.2.1
Требуются оба этапа
Ответ 4
Swift 3 с Xcode 8.3.3
1) Добавьте строку в Info.plist.
![введите описание изображения здесь]()
2) В вашем ViewController ViewDidLoad() переопределить add:
UIApplication.shared.isStatusBarHidden = true
Ответ 5
Вот мой быстрый код для настройки строки состояния и стиля.
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()
- для hide/show statusBar, в UIViewController
. self.setStatusBar(hidden: true/false)
Ответ 6
prefersStatusBarHidden доступен из iOS 7 +.
Используйте это в своем классе UIViewController
var isHidden = true{
didSet{
self.setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isHidden
}
![введите описание изображения здесь]()
Если вы измените возвращаемое значение для этого метода, вызовите setNeedsStatusBarAppearanceUpdate(). Чтобы указать, что ребенок диспетчер просмотра должен контролировать предпочтительную строку состояния, скрытую/незакрытую, реализует метод childViewControllerForStatusBarHidden.
Ответ 7
Решение prefersStatusBarHidden не работает.
Что работало вместо вместо
[[UIApplication applicationName] setStatusBarHidden: YES];
использовать
UIApplication.sharedApplication.statusBarHidden = ДА;