如果我使用具有自定义UILabel
和NSAttributedString
的{{1}},则kern
的身高会出错。
以下是我设置自定义kern和行间距的方法:
lineSpacing
这就是我得到的:
第一个标签(具有自定义kern的标签)的高度错误。它正好比它应该高8个点 - 这是我正在使用的自定义行高。
这仅适用于单行标签。如果我使用几行文本,它会按预期工作。
答案 0 :(得分:2)
这是NSAttributedStringKey.kern
的错误。要解决此问题,您可以使用建议in this answer计算UILabel
的行数。如果它只有一行,请将lineSpacing
设置为0。
private func getAttributedText(text: String, kern: CGFloat, lineSpacing: CGFloat) -> NSAttributedString {
let attributedString = NSMutableAttributedString(string: text)
let font = UIFont.systemFont(ofSize: 16)
let attributes: [NSAttributedStringKey : Any] = [.kern: kern,
.font: font]
attributedString.addAttributes(attributes, range: NSMakeRange(0, attributedString.length))
let maxSize = CGSize(width: [custom width], height: CGFloat.greatestFiniteMagnitude)
let sizeOfLabel = attributedString.boundingRect(with: maxSize, options: .usesLineFragmentOrigin, context: nil)
if sizeOfLabel.height > font.lineHeight {
let style = NSMutableParagraphStyle()
style.lineSpacing = lineSpacing
attributedString.addAttribute(.paragraphStyle, value: style, range: NSMakeRange(0, attributedString.length))
}
return attributedString
}