ios - 为什么 UILabel 上的首行缩进不适用于自定义字体?

标签 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 的字体。你知道如何让它与这种字体一起工作吗?

最佳答案

注意:我正在使用 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/

相关文章:

ios - IOS后台运行代码

ios - 安装 cocoa pod 时出错

ios - 如何在 Swift 中将文件写入位于 Apple 的文件应用程序中的文件夹

swift - 从 UITableViewCell 内的 tableView 中删除单元格

iphone - UIMenuController 未显示 UIPasteBoard 已清除 iPhone 应用程序?

ios - 如何在 iOS 7 中更改 UITabBar 外观

ios - 为 UIView 添加阴影和角,除了底部

ios - Xcode 更新后如何修复核心 NFC 框架的无效权利

swift - 使用 Swift 3 Xcode 8 居中对齐多个标签

swift - 有没有不使用 sizeToFit 就能准确计算 UILabel 大小的方法?