UILabel в UITableViewCell в файле.xib игнорирует темный режим
У меня есть мой обычай UITableViewCells
в .xib
файлы. Начиная с Xcode 11 Beta 5 (также тестируется с Beta 6) мой UILabels
игнорируйте темный режим, и текст всегда черный. Я установил UILabel
цвет текста по умолчанию (цвет метки), поэтому он должен измениться автоматически. У кого-нибудь есть идеи что не так?
Вот снимок экрана: первая ячейка является основной ячейкой, вторая - настраиваемой ячейкой в .xib
файл.
1 ответ
Похоже, это ошибка в Xcode 11 (протестировано в бета-версии 7 и GM Seed 1) - я отправил эту проблему в Apple через Feedback Assistant (FB7198213). Проблема исправлена в Xcode 11 GM Seed 2.
Для предыдущих версий Xcode 11 обходным путем для неправильного поведения цветов динамических меток является переназначение цвета метки в awakeFromNib()
в подклассе ячейки табличного представления. Например:
class TableCell: UITableViewCell {
@IBOutlet private weak var label: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
if #available(iOS 13.0, *) {
// The label's textColor was set to secondaryLabel in the XIB editor
// but we reassign it to secondaryLabel again here. This prevents
// a bug where the label always appears in its light mode variant.
label.textColor = .secondaryLabel
}
}
}
Исходный ответ:этот исходный ответ решает проблему только для цвета метки по умолчанию (т. Е. Основного).
Кажется, есть ошибка в редакторе XIB в Xcode 11 (протестировано в бета-версии 7) в отношении редактирования цветов меток. Когда цвет метки установлен в редакторе XIB на "Цвет метки" (даже если он уже был установлен на это), базовый XML изменяется таким образом, что метка становится черной даже в темном режиме. Изучив разницу в файле XIB между созданием новой метки и после явной установки цвета этой метки на "Label Color", можно увидеть разницу.
В моем простом примере XML файла XIB был следующим:
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
<rect key="frame" x="20" y="15" width="71" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
кому:
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
<rect key="frame" x="20" y="15" width="71" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="highlightedColor"/>
</label>
Обратите внимание, что строка <nil key="textColor"/>
был удален. Добавление этого назад вручную исправляет поведение метки в темном режиме.
Подобная проблема здесь. Некоторые динамические цвета, используемые в XIB, не используют свою темную версию, когда включен темный режим.
Это происходит как в симуляторе, так и на реальных устройствах. Цвета отображаются правильно при моделировании темного режима в Xcode (Interface Builder).
Моя цель развертывания проекта - iOS 10.
@ Эндрю Беннет, это сработало для меня. Спасибо. Мне пришлось реализовать обходной путь в Objective-C, потому что эта часть моего приложения все еще находится в Objective-C.
- (void)awakeFromNib {
[super awakeFromNib];
if (@available(iOS 13.0, *)) {
// The label's textColor was set to secondaryLabel in the XIB editor
// but we reassign it to secondaryLabel again here. This prevents
// a bug where the label always appears in its light mode variant.
// label.textColor = .secondaryLabel
lblTitle.textColor = UIColor.secondaryLabelColor;
}
}
Xcode 11 GM Seed 2, который был выпущен сегодня, похоже, решил проблему.
Исправлена проблема, из-за которой системные цвета в файлах XIB, настроенных на развертывание до iOS 13.0, не могли адаптироваться к внешнему виду системы во время выполнения. (54362252)