TintColor не меняется для UIBarButtonItem для стадии .normal в случае iOS 13.2

Я пробовал почти максимальное решение, и это не помогло, выбранный цвет состояния применяется, но для нормального состояния он не применяется. Эта проблема возникает только в iOS13.2.

        tabBarItem.setTitleTextAttributes([NSAttributedString.Key.font: tabFont,
                                       NSAttributedString.Key.foregroundColor: UIColor.yellow],
                                      for: .selected)
    tabBarItem.setTitleTextAttributes([NSAttributedString.Key.font: tabFont,
                                       NSAttributedString.Key.foregroundColor: UIColor.white],
                                      for: UIControl.State.normal)

Я отключил темный режим в plist. Он всегда отображается серым цветом.

1 ответ

Немного непонятно, в чем вопрос. Это ошибка или, по крайней мере, серьезное изменение поведения в iOS 13.

Чтобы убедиться в этом, просто создайте новый проект из шаблона приложения с вкладками и примените свой код в инициализаторе первого контроллера представления:

class FirstViewController: UIViewController {
    required init?(coder: NSCoder) {
        super.init(coder:coder)
        let tabFont = UIFont(name: "Georgia", size: 14)!
        tabBarItem.setTitleTextAttributes([.font: tabFont,
                                           .foregroundColor: UIColor.yellow],
                                          for: .selected)
        tabBarItem.setTitleTextAttributes([.font: tabFont,
                                           .foregroundColor: UIColor.white],
                                          for: UIControl.State.normal)
    }
}

В iOS 12 текст элемента панели вкладок желтый, если он выбран, и белый, если он не выбран. Но в iOS 13 текст элемента панели отображается серым, когда он не выбран.

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

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    self.tabBarController?.tabBar.unselectedItemTintColor = .white
}

Но это слишком широкая кисть, потому что она окрашивает все элементы панели вкладок, а также окрашивает изображение.

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

Так что кроме сообщения об ошибке, вы мало что можете сделать.

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