Dans Swift 2, j'ai utilisé un attribut d'exécution défini par l'utilisateur dans le scénarimage avec un chemin d'accès clé de tintColor pour modifier les couleurs des icônes d'éléments de la barre d'onglets. Cependant, il semble que tintColor ait été supprimé avec Swift 3. Comment puis-je modifier la couleur sélectionnée des éléments de la barre de tabulation dans un contrôleur de barre de tabulation dans Swift 3?
Merci!
EDIT: capture d'écran jointe
Utilisez tabBarItem.setTitleTextAttributes
pour changer la couleur du texte des éléments de barre individuels.
Mettez ceci dans la méthode viewDidLoad
de chaque onglet:
self.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red()], for:.selected)
Pour changer la couleur de teinte des icônes et du texte, une solution simple consiste à changer la couleur de teinte TabBar dans la méthode viewWillAppear de chaque onglet:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.tintColor = UIColor.red()
}
Une autre solution pour changer la couleur de teinte de l’image est de créer une extension pour UIImage et de l’utiliser pour changer l’image sélectionnée avec une teinte personnalisée:
extension UIImage {
func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.translate(x: 0, y: self.size.height)
context.scale(x: 1.0, y: -1.0)
context.setBlendMode(CGBlendMode.normal)
let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
context.clipToMask(rect, mask: self.cgImage!)
tintColor.setFill()
context.fill(rect)
var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
return newImage
}
}
Utilisez ce code pour changer l'image sélectionnée:
self.tabBarItem.selectedImage = self.tabBarItem.selectedImage?.tabBarImageWithCustomTint(tintColor: UIColor.red())
Le dernier code en tant que par Swift 3 est
extension UIImage {
func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.translateBy(x: 0, y: self.size.height)
context.scaleBy(x: 1.0, y: -1.0)
context.setBlendMode(CGBlendMode.normal)
let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
context.clip(to: rect, mask: self.cgImage!)
tintColor.setFill()
context.fill(rect)
var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
return newImage
}
}