iOS UILabel textColor не обновляется в темном режиме - PullRequest
0 голосов
/ 18 октября 2019

У меня есть представление коллекции, которое показывает временные интервалы в приложении. В темном режиме кажется, что 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
            }

        }
    }

}

и результат:

enter image description here enter image description here

Ответы [ 3 ]

1 голос
/ 19 октября 2019

Существует два решения, обеспечивающие отображение цвета метки в режиме .dark: 1. Установите для цвета таблицы значение UIColor.labelColor. Это будет принято автоматически в зависимости от темы устройства темный или светлый

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

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: "MyBlckColor")

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

enter image description here

0 голосов
/ 21 октября 2019

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

0 голосов
/ 18 октября 2019

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

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

...