Поведение отступления для новых системных цветов iOS 13 в iOS 12
В настоящее время я перехожу на Dark Mode, и я решил, что используя новые системные цвета, такие как systemBackground
а также label
в Интерфейсном Разработчике также просто работает, когда приложение запускается в iOS 12. Я наполовину ожидал получить ошибку компилятора, но вместо этого приложение выглядит как в легком режиме iOS 13. Очевидно, среда выполнения как-то переводит эти цвета для iOS 12.
Кто-нибудь знает, что происходит под капотом и есть ли удобный способ добиться того же в коде?
1 ответ
Если вы посмотрите на XML раскадровки, вы увидите что-то вроде:
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
Xcode 11 добавляет поддержку для обоих цветов. Какой бы механизм ни преобразовывал файл.storyboard в действия во время выполнения, он должен знать, какой цвет ему нужно использовать для iOS 13 и какой цвет использовать для iOS 12 и более ранних версий.
В коде вам нужно что-то вроде следующего:
extension UIColor {
class var mySystemBackground: UIColor {
if #available(iOS 13, *) {
return .systemBackground
} else {
return .white
}
}
}