Swift: программно сделать UILabel полужирным без изменения его размера?

У меня есть UILabel, созданный программно. Я хотел бы сделать текст метки жирным шрифтом без указания размера шрифта. До сих пор я только нашел:

UIFont.boldSystemFont(ofSize: CGFloat) 

это то, что у меня есть точно:

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

но таким образом я также устанавливаю размер. Я бы хотел избежать этого. Есть ли способ?

Если нет никакого способа, что было бы хорошим обходным путем в Swift?

спасибо!

2 ответов


почему не просто:

titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabel.font.pointSize)

чтобы просто сделать шрифт полужирным, не изменяя размер шрифта, вы можете создать такое расширение (которое основано на ответе здесь:

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)
    }

}

таким образом, вы можете использовать его следующим образом:

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

обновление для синтаксиса 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)
    }
}