web-dev-qa-db-fra.com

L'icône UITabBarItem n'est pas colorée correctement pour iOS 13 lorsqu'une couleur de teinte de barre est spécifiée dans Interface Builder dans Xcode 11, bêta 2

J'ai un problème avec la couleur de mes UITabBarItems lorsque j'exécute sur des simulateurs iOS 13, en utilisant Xcode 11, beta 2. J'ai créé un exemple de projet à partir de zéro, et tout fonctionne correctement lorsque je ne spécifie pas une couleur de teinte de barre. Cependant, lorsque je spécifie une couleur de teinte de barre personnalisée via Interface Builder, j'obtiens ceci:

Both selected an unselected item icons have highlight color

Toutes les icônes d'éléments dans la barre d'onglets ont la couleur sélectionnée si je définis la propriété "Bar Tint" dans Interface Builder sur autre chose que clair. Lorsqu'il est réglé sur effacer, les icônes sont colorées correctement. Les icônes sont également colorées correctement si je compile et exécute dans un simulateur iOS 12.

Cela semble être un bug dans Xcode 11, mais peut-être que je manque quelque chose?

10
Jordan Wood

En apparence, cela peut sembler être un bogue, mais vous pouvez l'atténuer en définissant un .unselectedItemTintColor sur votre instance UITabBar.

self.tabBar.unselectedItemTintColor = [UIColor lightGrayColor];
13
mmackh

Il y a une nouvelle API d'apparence dans iOS 13. Pour colorer correctement l'icône et le texte de l'élément de la barre d'onglets en utilisant Xcode 11.0, vous pouvez l'utiliser comme ceci:

    if #available(iOS 13, *) {
        let appearance = UITabBarAppearance()

        appearance.backgroundColor = .white
        appearance.shadowImage = UIImage()
        appearance.shadowColor = .white

        appearance.stackedLayoutAppearance.normal.iconColor = .black
        appearance.stackedLayoutAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]

        appearance.stackedLayoutAppearance.selected.iconColor = .red
        appearance.stackedLayoutAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red]

        self.tabBar.standardAppearance = appearance

    } 
24
Samuël

Utilisez le champ d'attribut "Image Tint" dans IB.

Use the attribute field "Image Tint" in IB

4
Ivan Belousov

Pour l'objectif C, vous pouvez utiliser dans AppDelegate:

[[UITabBar appearance] setTintColor:[UIColor whiteColor]];
[[UITabBar appearance] setUnselectedItemTintColor:[UIColor colorWithRed:255.0f/255.0f green:255.0f/255.0f blue:255.0f/255.0f alpha:0.65f]];
1
Ing. Ron
    if #available(iOS 13.0, *) {
        let appearance = tabBar.standardAppearance
        appearance.stackedLayoutAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black]
        appearance.stackedLayoutAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.blue]
        appearance.stackedLayoutAppearance.normal.iconColor = UIColor.black
        appearance.stackedLayoutAppearance.selected.iconColor = UIColor.blue
        tabBar.standardAppearance = appearance
    } else {
        tabBar.unselectedItemTintColor = UIColor.black
        tabBar.tintColor = UIColor.blue
    }
0
self.tabBarController?.tabBar.unselectedItemTintColor = UIColor.lightGray

Cela fonctionne pour moi dans Swift 4. Il suffit de mettre cela dans la méthode override func viewWillDisappear(_ animated: Bool) et cela se mettra à jour à mesure que la vue change.

Donc, ça ressemblera à quelque chose comme ça

override func viewWillDisappear(_ animated: Bool) {
    self.tabBarController?.tabBar.unselectedItemTintColor = UIColor.lightGray
}

Même si c'est un bug (je ne suis pas sûr), vous pouvez l'utiliser pour changer la couleur de l'élément de la barre d'onglets en utilisant la couleur de votre choix

0
Bhavin p