web-dev-qa-db-fra.com

Swift: rendre UILabel par programme audacieux sans changer sa taille?

J'ai un UILabel créé par programme. Je voudrais mettre le texte de l'étiquette en gras sans spécifier la taille de la police. Jusqu'à présent, je n'ai trouvé que:

UIFont.boldSystemFont(ofSize: CGFloat) 

C'est exactement ce que j'ai:

let titleLabel = UILabel()
let fontSize: CGFloat = 26
titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabelFontSize)

Mais de cette façon, je règle également la taille. Je voudrais éviter cela. Y a-t-il un moyen?

S'il n'y a aucun moyen, quelle serait une bonne solution de contournement dans Swift?

Je vous remercie!

15
user1269290

Pourquoi pas seulement:

titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabel.font.pointSize)
28
Chris Vig

Pour simplement mettre la police en gras sans modifier la taille de la police, vous pouvez créer une extension comme celle-ci (qui est basée sur la réponse ici :

extension UIFont {

    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor()
        .fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
        return UIFont(descriptor: descriptor, size: 0)
    }

    func bold() -> UIFont {
        return withTraits(.TraitBold)
    }

}

Donc, de cette façon, vous pouvez l'utiliser comme ceci:

let titleLabel = UILabel()
titleLabel.font = titleLabel.font.bold() //no need to include size!

Mise à jour pour Swift 4:

extension UIFont {

    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor               
           .withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
        return UIFont(descriptor: descriptor!, size: 0)
    }

    func bold() -> UIFont {
        return withTraits(traits: .traitBold)
    }
}
9
Benjamin Lowry