Предпочтительный 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
}