iOS 13 Цвет UIBarButtonItem в темном режиме

Мое изображение UIBarButtonItem не меняет свой цвет при переключении между темным и светлым режимами.

Я установил цвет программно и ожидал, что он изменится с черного на белый при переключении режима. По крайней мере, он работает с tintColor моего NavigationBar.

Я установил:

myBarButton.tintColor = UIColor.white

и изображение кнопки остается белым в темном И в светлом режиме.

С другой стороны, в светлом режиме черный цвет и белый в темном режиме:

navigationBar.tintColor = UIColor.white

Почему он ведет себя иначе и как добавить эту функцию в свой UIBarButtonItem?


person Tiu    schedule 11.10.2019    source источник


Ответы (2)


UIColor.white не динамический цвет. Он будет белым независимо от настройки внешнего вида. Если вам нужен цвет, который отличается в зависимости от внешнего вида, вам нужно взять один из новых динамических системных цветов (например, UIColor.systemBackground будет белым в светлом и черным в темном режиме) или создать цветовой ресурс с разными значениями цвета для светлый и темный вид в каталоге активов.

Подробнее о новых системных цветах: https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color#dynamic-system-colors

person Frank Schlegel    schedule 11.10.2019
comment
Спасибо! UIColor.label - это новый цвет, который мне нужен. - person Tiu; 16.10.2019

Использование API нового внешнего вида iOS 13: https://developer.apple.com/documentation/uikit/uinavigationbarappearance

Пример:

let navStyle = UINavigationBarAppearance()

let buttonStyle = UIBarButtonItemAppearance()
// Change properties of buttonStyle here with dynamic colours such as UIColor.label.
style.buttonAppearance = buttonStyle
style.doneButtonAppearance = ...
style.backButtonAppearance = ...

navigationController?.navigationBar.standardAppearance = navStyle
navigationController?.navigationBar.scrollEdgeAppearance = ...
navigationController?.navigationBar.compactAppearance = ...
person Ash Cameron    schedule 11.10.2019