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:
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?
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];
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
}
Utilisez le champ d'attribut "Image Tint" dans IB.
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]];
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
}
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