Подтвердить что ты не робот

SetStatusBarHidden устарел в iOS 9.0

Я обновляю свой код с iOS 8 до iOS 9. У меня есть фрагмент кода в моей программе [[UIApplication applicationName] setStatusBarHidden:YES];.

Я получаю предупреждение: setStatusBarHidden устарел в iOS 9.0, Use - [UIViewController prefersStatusBarHidden ". Если я просто заменил" setStatusBarHidden "на" prefersStatusBarHidden ", я получаю" метод экземпляра не найден". Может кто-нибудь, пожалуйста, предложите мне, как решить эту проблему?

4b9b3361

Ответ 1

Добавьте код ниже в ваш контроллер просмотра.

 - (BOOL)prefersStatusBarHidden {

   return NO;
}

Примечание:

  • Если вы измените возвращаемое значение для этого метода, вызовите setNeedsStatusBarAppearanceUpdate.
  • Для childViewController, чтобы указать, что контроллер дочернего представления должен управлять привилегированным статусом, скрытым/незакрытым состоянием, реализовать childViewControllerForStatusBarHidden.

Ответ 2

вам нужно добавить метод в свой viewController.m

- (BOOL)prefersStatusBarHidden {

   return NO;
}

Ответ 3

Swift 3.1 Xcode 8.2.1

  • Измените info.plist строку Посмотрите на строку состояния на основе контроллера и установите для нее значение NO

  • В ваших целевых настройках отметьте "Скрыть строку состояния"

Требуются оба этапа

Ответ 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() {}
}

Использование

  • в функции laucing

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 = ДА;