在开发UI的过程中,必不可少的会和UIFont打交道;
当我们要使用系统常规的UIFont加粗或者斜体的时候,就很简单;
let boldFont = UIFont.boldSystemFont(ofSize: 16)
let italicFont = UIFont.italicSystemFont(ofSize: 16)
但是,很明显,这里的加粗Or斜体是固定Size的;那如何动态的改变字体Size,而仍然拥有Bold & Italic?
//下面的代码将为您提供一个带有.body文本样式的缩放字体。但是,无法指定您需要带有正文样式的粗体或斜体字体。
label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true
下面的Extensions可以很容易地将该特征添加到缩放字体中。
import UIKit
extension UIFont {
func withTraits(traits:UIFontDescriptorSymbolicTraits) -> UIFont {
let descriptor = fontDescriptor.withSymbolicTraits(traits)
return UIFont(descriptor: descriptor!, size: 0) //size 0 means keep the size as it is
}
func bold() -> UIFont {
return withTraits(traits: .traitBold)
}
func italic() -> UIFont {
return withTraits(traits: .traitItalic)
}
}
扩展分为两部分。withTraits
函数更像是一个助手函数,它将采用我们正在扩展的字体,并将指定的特征(加粗 斜体)应用于它。大小参数设置为零,这意味着不要更改字体大小与当前大小。bold
和italic
两种功能是方便函数。
使用:
现在,如果我想要一个缩放的字体,并想让它变粗变斜体,就这么简单:
let boldFont = UIFont.preferredFont(forTextStyle: .headline).bold()
let italicFont = UIFont.preferredFont(forTextStyle: .footnote).italic()
Thanks。。。