iOS UILabel textColor не обновляется в темном режиме

У меня есть представление коллекции, которое показывает временные интервалы в приложении. В темном режиме кажется, что UILabel не показывает черный цвет текста на белом фоне.

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

В коде, когда пользователь выбирает ячейку,

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

   if let cell = collectionView.cellForItem(at: indexPath) as? TimeCell{
      cell.timeLabel.toggleTheme(true)
   }
 }

и у меня есть расширение UILabel:

extension UILabel{

    func toggleTheme(_ selected : Bool){
        if selected{
            if #available(iOS 13.0, *) {
                if self.traitCollection.userInterfaceStyle == .dark{
                    self.textColor = UIColor.black
                    self.backgroundColor = UIColor.white
                }else{
                    self.textColor = UIColor.white
                    self.backgroundColor = UIColor.black
                }
            } else {
                 self.textColor = UIColor.white
                 self.backgroundColor = UIColor.black
            }

        }else{
            if #available(iOS 13.0, *) {
                if self.traitCollection.userInterfaceStyle == .dark{
                    self.textColor = UIColor.white
                    self.backgroundColor = UIColor.black
                }else{
                    self.textColor = UIColor.black
                    self.backgroundColor = UIColor.white
                }
            } else {
                 self.textColor = UIColor.black
                 self.backgroundColor = UIColor.white
            }

        }
    }

}

и результат:

введите здесь описание изображения  введите описание изображения здесь


person Teja Nandamuri    schedule 18.10.2019    source источник
comment
noahgilmore.com/blog/dark-mode-uicolor-compatibility   -  person koen    schedule 18.10.2019


Ответы (4)


Есть 2 решения, чтобы убедиться, что цвет UILabel отображается в режиме .dark:

  1. Установите цвет таблицы на UIColor.labelColor. Он будет адаптирован автоматически в зависимости от темной или светлой темы устройства.

  2. Другой вариант - определить цвет в xcasset и предоставить варианты цвета для разных тем. Вам нужно выбрать Внешний вид как Любой, Темный, чтобы получить возможность отображать несколько цветов. См. Изображение ниже. С определенным вам НЕ нужно проверять тему, как в приведенном ниже фрагменте:

    if #available(iOS 13.0, *) {
        if self.traitCollection.userInterfaceStyle == .dark {
            self.textColor = UIColor.black
            self.backgroundColor = UIColor.white
        } else {
            self.textColor = UIColor.white
            self.backgroundColor = UIColor.black
        }
    } else {
        self.textColor = UIColor.white
        self.backgroundColor = UIColor.black
    }
    

В качестве альтернативы вы можете просто установить self.textColor = UIColor(named: "MyBlackColor")

Надеюсь, это поможет.

введите описание изображения здесь

person Pankaj Kulkarni    schedule 19.10.2019

Каким-то образом метка в представлении коллекции не работает должным образом. Я пробовал разные конфигурации, но ни одна из них не работала. Вместо этого я использовал кнопку, и в моем случае это сработало. Я обновлю свой ответ, как только у меня будет работа с ярлыком.

person Teja Nandamuri    schedule 21.10.2019

Цвет по умолчанию не будет работать как черный в iOS 13, потому что цвет по умолчанию был изменен на цвет UIlabel вместо черного.

попробуйте настроить цвет текста после настройки цвета фона.

person Reed    schedule 18.10.2019
comment
Я пробовал цвет по умолчанию и другой черный цвет. Оба не работали. - person Teja Nandamuri; 18.10.2019
comment
да по умолчанию работать не будет. не могли бы вы попробовать self.backgroundColor = UIColor.black self.textColor = UIColor.white вместо self.textColor = UIColor.white self.backgroundColor = UIColor.black - person Reed; 18.10.2019
comment
Вам нужно использовать UIColor.label и т. Д. В iOS 13, см. Ссылку, которую я разместил выше. - person koen; 18.10.2019

Если вы используете цвет метки по умолчанию, цвет метки будет белым для темного режима и черным для светлого режима.

Если вы используете свой собственный цвет, рабочий цвет будет вашим индивидуальным цветом.

person Alessandro Pirovano    schedule 03.03.2021