Понимание SystemColors для темного режима в старых версиях iOS

Изменить: на основе разговоров ниже мое замешательство было связано с тем, что не все системные цвета совместимы со старыми операционными системами, в моем случае метка и цвета systemBackground - это только iOS13, для которой требуется резерв. Теперь это имеет смысл.

У меня есть приложение, поддерживающее iOS11, но я хочу предоставить темный режим пользователям с iOS13.

В Xcode 11 / iOS13 вы можете указать системные цвета для темного режима с резервным вариантом для более старых операционных систем, как показано ниже ...

if #available(iOS 13.0, *) {
    view.textColor = UIColor.label
} else {
    view.textColor = UIColor.black
}

Если я попытаюсь использовать цвет без резервной копии для более старых систем, я получаю сообщение об ошибке, которое ... отчасти имеет смысл, я говорю отчасти потому, что в документации указано, что system colors (StandarColors) поддерживаются в iOS 7.0+.

Забавно то, что если я использую новые системные цвета непосредственно из инспектора атрибутов, я не получаю сообщение об ошибке, поэтому мой вопрос ...

1- Что происходит, когда вы используете новые системные цвета непосредственно из инспектора атрибутов, когда вы не получаете ошибки при их выборе?

2- Что пользователь с iOS11 увидит в представлении, где цвет label был напрямую выбран из инспектора атрибутов?

Спасибо


person fs_tigre    schedule 20.10.2019    source источник
comment
Теперь ваш вопрос, вероятно, дублирует stackoverflow.com/questions/57364611/   -  person rmaddy    schedule 20.10.2019


Ответы (1)


Если вы используете новые системные цвета в коде (кроме systemOrange, как правильно указал rmaddy), вам нужно проверить доступность iOS 13, потому что API раньше не было.

Однако, когда вы выбираете такой цвет в Интерфейсном Разработчике, он будет работать автоматически в более старых версиях iOS. Вот что в этом случае Interface Builder вставляет в вашу раскадровку:

<color key="backgroundColor" systemColor="systemOrangeColor" red="1" green="0.58431372550000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>

Как видите, запасной вариант добавляется на тот случай, если атрибут systemColor не распознан.

Если вам нужно решение, совместимое с iOS 11, которое не требует @available проверок каждый раз, вы можете использовать Color Assets, которые вы определяете в каталоге активов.

Я также создал помощник, который делает именно это.

person Frank Schlegel    schedule 20.10.2019