Предпочтительный StatusBarStyle удален в Swift 3?

Поэтому я недавно только что обновился до Xcode 8, и я только что получил эту ошибку для следующего кода.

Ошибка в том, что метод не переопределяет любой метод из своих суперклассов.

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

Буду очень признателен за помощь, спасибо!

2 ответа

Решение

В iOS 10 preferredStatusBarStyle это свойство, а не метод. Так что вместо того, чтобы переопределить его func декларация, как вы сделали, вы переопределяете получатель с помощью var объявление:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Сообщение об ошибке компилятора Swift здесь, вероятно, могло бы быть лучше - поскольку оно, кажется, знает, что ваша функция переопределения должна охватывать свойство, она, вероятно, может предложить это как исправление. Я бы порекомендовал оставить сообщение об ошибке в Swift с открытым исходным кодом.


Примечание: в iOS 12 может также потребоваться установить UIViewControllerBasedStatusBarAppearance (он же "Просмотр внешнего вида строки состояния на основе контроллера") в вашем Info.plist. И проверьте иерархию контроллера представления, поскольку контроллеры представления контейнера, такие как навигация и разделенное представление, могут не передавать это от своих дочерних элементов.

Различия API iOS 10.0 показывают, что UIViewController.preferredStatusBarStyle() -> UIStatusBarStyle метод был удален и что UIViewController.preferredStatusBarStyle свойство было добавлено.


Аналогичным образом, с Xcode 8, вы можете щелкнуть правой кнопкой мыши на любой UIViewController в своем коде выберите Перейти к определению, а затем выполните поиск preferredStatusBarStyle, Вы обнаружите, что preferredStatusBarStyle теперь имеет следующую декларацию:

@available(iOS 7.0, *)
open var preferredStatusBarStyle: UIStatusBarStyle { get }

Таким образом, следующий фрагмент кода показывает, как переопределить preferredStatusBarStyle с Xcode 8 / Swift 3:

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return .lightContent
    }
}

Или, в гораздо более коротком и предпочтительном стиле:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Другие вопросы по тегам