我想要一个第一行缩进 x 点的多行标签。
为此,我使用了 NSAttributedString
及其属性 firstLineHeadIndent
。
它适用于大多数情况,除非文本仅比一行长几个字符。我发现在那种情况下它会忽略缩进。并且标签的尾部穿过标签的边缘以达到缩进的确切数量。
let text = "Hello World! Hello World! Hee"
let attString = NSMutableAttributedString(string: text)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.firstLineHeadIndent = 40
attString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attString.length))
attString.addAttribute(NSFontAttributeName, value: label.font, range: NSMakeRange(0, attString.length))
label.attributedText = attString
我应该注意,如果我使用系统字体,一切都很好。仅在自定义字体的情况下。在这种情况下,我使用名为 Rubik 的字体。你知道如何让它与这种字体一起工作吗?
最佳答案
注意:我正在使用 Rubik-Regular 字体
作为您在帖子中提到的测试字体。从您的代码中您只设置了 headIntent
到您的第一行
。如果您想使用headIntent
,您应该使用paragraphStyle.headIntent
。
let text = "Hello World! Hello World! Hee"
let attString = NSMutableAttributedString(string: text)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .left
paragraphStyle.firstLineHeadIndent = 40
paragraphStyle.headIndent = 40
paragraphStyle.lineBreakMode = .byTruncatingTail
attString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attString.length))
attString.addAttribute(NSFontAttributeName, value: UIFont(name: "Rubik-Regular", size: 25)!, range: NSMakeRange(0, attString.length))
label.attributedText = attString
label.numberOfLines = 0
关于ios - 为什么 UILabel 上的首行缩进不适用于自定义字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642202/