gpt4 book ai didi

ios - 使用自定义 lineSpacing 和 kern 时 UILabel 的高度错误

转载 作者:可可西里 更新时间:2023-11-01 03:33:22 26 4
gpt4 key购买 nike

如果我使用具有自定义 kernlineSpacingNSAttributedString,我会得到错误的 UILabel 高度。

这是我设置自定义紧排和行间距的方法:

override func viewDidLoad() {
super.viewDidLoad()

let shortText = "Single line"
self.label.attributedText = self.getAttributedText(text: shortText, kern: 0.2, lineSpacing: 8)
self.label2.attributedText = self.getAttributedText(text: shortText, kern: 0, lineSpacing: 8)
}

private func getAttributedText(text: String, kern: CGFloat, lineSpacing: CGFloat) -> NSAttributedString {
let attributedString = NSMutableAttributedString(string: text)

let style = NSMutableParagraphStyle()
style.lineSpacing = lineSpacing

let attributes: [NSAttributedStringKey : Any] =
[.paragraphStyle : style,
.kern: kern]

attributedString.addAttributes(attributes,
range: NSMakeRange(0, attributedString.length))

return attributedString
}

这是我得到的:

Result

第一个标签(具有自定义紧排的标签)的高度错误。它比应有的高度正好高 8 磅 - 这就是我正在使用的自定义行高。

这只发生在单行标签上。如果我使用几行文本,它会按预期工作。

最佳答案

这是 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
}

关于ios - 使用自定义 lineSpacing 和 kern 时 UILabel 的高度错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com