web-dev-qa-db-ja.com

Swift:サイズを変更せずに、プログラムでUILabelを太字にしますか?

プログラムで作成されたUILabelがあります。フォントサイズを指定せずにラベルのテキストを太字にしたいと思います。これまでのところ、私は見つけただけです:

UIFont.boldSystemFont(ofSize: CGFloat) 

これは私がまさに持っているものです:

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

しかし、この方法でサイズも設定しています。私はそれを避けたいです。方法はありますか?

方法がない場合、Swiftでの適切な回避策は何ですか?

ありがとうございました!

15
user1269290

なぜだけではありません:

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

フォントサイズを変更せずにFontを太字にするだけで、このような拡張機能を作成できます(答え here に基づいています)。

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)
    }
}
9
Benjamin Lowry