BetterLabel 简化了设置普通的样式属性,这些属性通常应由 NSAttributedString
来处理。
动机
在 iOS 上,设置某些 UILabel
属性非常不方便,因为它们不能直接在 UILabel
上设置 - 因此我们需要使用 NSAttributedString
。让我们看一个例子。
想象一下,你需要创建一个具有自定义 字体、文本颜色、对齐、字母间距(间距)和自定义 行高 的标签。那么你应该创建一个 NSAttributedString
并将其设置为标签。
let text = "Some text"
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.minimumLineHeight = 15
paragraphStyle.maximumLineHeight = 15
paragraphStyle.alignment = .center
let textAttr = NSAttributedString(string: text, attributes: [
.font: UIFont.systemFont(ofSize: 10),
.foregroundColor: UIColor.blue,
.kern: 1.2,
.paragraphStyle: paragraphStyle
])
someLabel.attributedText = textAttr
通常,你只有一个标签应该保留所有的样式,你只想更改文本。好吧,使用 NSAttributedString
你需要将属性存储在某个地方,所有这些都变得非常复杂。
你想要的是设置标签的样式,然后稍后只需设置它应该显示的文本!这正是 BetterLabel
发挥作用的地方。
只需定义样式
betterLabel.font = UIFont.systemFont(ofSize: 10)
betterLabel.textColor = .blue
betterLabel.kern = 1.2
betterLabel.lineHeight = 15
betterLabel.textAlignment = .center
然后,只要你想,就可以设置你想要的文本!
betterLabel.text = "Some text"
简单吗?
想象一下,你需要在标签内部添加一些填充...你可能认为将标签嵌入到某个容器视图中或子类化标签。但是,使用 BetterLabel
(比 UILabel
更好
betterLabel.contentInset = UIEdgeInsets(top: 15, left: 5, bottom: 10, right: 12)
这很棒,对吧?
属性化标签
好的,BetterLabel
本身提供了对从 NSAttributedString
中最常见的属性的单键,但对于某些情况,可能不够。这就是为什么还需要 BetterAttributedLabel
。您只需设置 attributes
属性,稍后设置文本即可。
betterAttributedLabel.attributes = [
.font: .systemFont(ofSize: 10),
.foregroundColor: UIColor.red
]
betterAttributedLabel.text = "That's how it's done with BetterAttributedLabel 😎"
应该就这样了
UIButton 扩展
为了使 BetterLabel
更加出色,您可以使用 BetterLabel
为 UIButton
设置属性化标题。
let button = UIButton(type: .system)
button.setBetterLabel(betterLabel, for: .normal)
什么不是好的使用案例
如果您需要以不同样式显示一个字符串,这不是 BetterLabel
的目的,您应该使用常见的 UILabel
。原因是我认为将 String
和 NSAttributedString
结合成单一的标签组件有些令人困惑。