我正在尝试使用 UIlabel 扩展 + String 扩展来获得摘要结果,但丢失了它的一些设置
这是 UILabel 扩展名
extension UILabel {
static func insultString() -> UILabel {
let label = UILabel()
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.textAlignment = .center
label.font = AppFonts.regular17.font
label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.7
label.lineBreakMode = .byClipping
label.sizeToFit()
return label
}
}
这是我在代码中使用它的方式
private var insultLabel = UILabel.insultString()
这是 String 扩展名
extension String {
static func stringConfig(_ label: String) -> NSAttributedString {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineHeightMultiple = 1.35
let string = NSMutableAttributedString(string: label, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
return string
}
}
这是我在代码中使用它的方式
self.insultLabel.attributedText = String.stringConfig(self.presenter?.insults.savedInsults.last ?? "No insults")
问题是我正确地获得了 string 的字体和大小,但是我丢失了 label.textAlignment = .center、label.adjustsFontSizeToFitWidth = true 等等……为什么会这样?
回答1
在NSAttributedString
中,每个段落都可以有自己的文本对齐方式,所以需要在paragraphStyle中设置:
paragraphStyle.alignment = .center
对于 adjustsFontSizeToFitWidth
,我认为它不适用于属性文本,因为在这种情况下 UILabel
不再拥有字体大小。它没有明确记录,但对我来说很有意义。
同样,您在构建标签时设置的其他一些属性将被忽略,因为它们由属性 string 管理。