为什么UILabel上的第一行缩进不适用于自定义字体?

时间:2016-11-16 20:59:40

标签: ios swift uilabel nsattributedstring

我想要一个多行标签,第一行用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

这是应该已经打破标签的情况。 enter image description here

在这种情况下,我将文字制作得更长一点并且效果很好: enter image description here

我应该注意,如果我使用系统字体,那一切都很好。仅在自定义字体的情况下。在这种情况下,我使用称为Rubik的字体。你知道如何使用这种字体吗?

1 个答案:

答案 0 :(得分:3)

注意:我使用Rubik-Regular font作为您在帖子中提到的测试字体。从您的代码开始,您只需将headIntent设置为first line。如果您想使用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