NSAttributedString 文本总是粘在大 lineHeight 底部
NSAttributedString text always sticks to bottom with big lineHeight
我正在尝试实现来自 Sketch 的设计标签,例如我需要字体大小 = 19 和行高 = 50 的文本样式。所以我最终使用 NSAttributedString
和 NSMutableParagraphStyle
但由于文本被粘在 UILabel
[= 底部的问题而停止了21=]
我已经尝试过使用 lineHeightMultiple
和 lineSpacing
但是它们没有给我想要的行高所以我最终使用了 minimumLineHeight
和 maximumLineHeight
等于一样
这是我制作NSAttributedString
的方法
private static func makeAttributedString(
with attributes: TextAttributes,
text: String? = nil,
alignment: NSTextAlignment = .center
) -> NSAttributedString {
let font = UIFont(name: attributes.font.rawValue, size: attributes.fontSize)!
let paragraph = NSMutableParagraphStyle()
paragraph.alignment = alignment
paragraph.paragraphSpacing = attributes.paragraph
paragraph.minimumLineHeight = attributes.lineHeight // equal 50 in my case
paragraph.maximumLineHeight = attributes.lineHeight // equal 50 in my case
let attributes: [NSAttributedStringKey: Any] = [
NSAttributedStringKey.paragraphStyle: paragraph,
NSAttributedStringKey.foregroundColor: attributes.textColor,
NSAttributedStringKey.kern: attributes.kern,
NSAttributedStringKey.font: font
]
return NSAttributedString(string: text ?? "", attributes: attributes)
}
我希望结果与设计相似
但实际上得到
注意:将高度限制设置为 50 不适用,因为我还需要多行标签,但它们存在相同的错误
看来我自己找到了一些解决方法,也许它会对某人有所帮助。
该方法是这样设置baselineOffset的:
NSAttributedStringKey.baselineOffset: (attributes.lineHeight - font.lineHeight) / 4
魅力十足:
我正在尝试实现来自 Sketch 的设计标签,例如我需要字体大小 = 19 和行高 = 50 的文本样式。所以我最终使用 NSAttributedString
和 NSMutableParagraphStyle
但由于文本被粘在 UILabel
[= 底部的问题而停止了21=]
我已经尝试过使用 lineHeightMultiple
和 lineSpacing
但是它们没有给我想要的行高所以我最终使用了 minimumLineHeight
和 maximumLineHeight
等于一样
这是我制作NSAttributedString
private static func makeAttributedString(
with attributes: TextAttributes,
text: String? = nil,
alignment: NSTextAlignment = .center
) -> NSAttributedString {
let font = UIFont(name: attributes.font.rawValue, size: attributes.fontSize)!
let paragraph = NSMutableParagraphStyle()
paragraph.alignment = alignment
paragraph.paragraphSpacing = attributes.paragraph
paragraph.minimumLineHeight = attributes.lineHeight // equal 50 in my case
paragraph.maximumLineHeight = attributes.lineHeight // equal 50 in my case
let attributes: [NSAttributedStringKey: Any] = [
NSAttributedStringKey.paragraphStyle: paragraph,
NSAttributedStringKey.foregroundColor: attributes.textColor,
NSAttributedStringKey.kern: attributes.kern,
NSAttributedStringKey.font: font
]
return NSAttributedString(string: text ?? "", attributes: attributes)
}
我希望结果与设计相似
但实际上得到
注意:将高度限制设置为 50 不适用,因为我还需要多行标签,但它们存在相同的错误
看来我自己找到了一些解决方法,也许它会对某人有所帮助。
该方法是这样设置baselineOffset的:
NSAttributedStringKey.baselineOffset: (attributes.lineHeight - font.lineHeight) / 4
魅力十足: