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)

Другие вопросы по тегам