web-dev-qa-db-fra.com

Barre de tabulation Couleur des boutons dans Swift 3?

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

 enter image description here

9
winston

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())
11
Sam_M

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
    }
}
0
Amit Majumdar