【问题标题】:NSAttributedString with tabs带有标签的 NSAttributedString
【发布时间】:2015-08-11 15:00:26
【问题描述】:

如何使用这种文本格式创建UILabel?你会使用 NSAttributedString 吗?

【问题讨论】:

标签: ios objective-c nsattributedstring


【解决方案1】:

NSAttributedString 可以创建带有制表位的文本列。这类似于在具有相同限制的文字处理器中完成的方式。

let text = "Name\t: Johny\nGender\t: Male\nAge\t: 25\nFavourites\t: Reading, writing"

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.tabStops = [NSTextTab(textAlignment: NSTextAlignment.Left, location: 150, options: [:])]
paragraphStyle.headIndent = 150

label.attributedText = NSAttributedString(string: text, attributes: [NSParagraphStyleAttributeName: paragraphStyle])

tabStops 提供在每个制表符后继续文本的位置。在这里,我们在第一列之后的合理位置做了一个选项卡。 headIndent 告诉标签,被换行的文本需要缩进一个固定的量,所以它会换行到下一行。

这种方法的局限性在于:

  1. 制表位位置是一个定点值,因此您需要知道自己想要什么。如果您选择的值小于某些行的第一列的宽度,则这些行将缩进到不同的位置。
  2. 只有在最后一列是换行时,换行才真正起作用。由于您的第二列以“:”开头,您可能只想增加您的 headIndent 或将“:”拆分为 \t:\t 并设置第二个制表位。如果您不让文本换行,这不是问题。

如果这些限制过于严格,您可以将标签重组为具有自动布局约束的多个标签的集合。

【讨论】:

  • 如何为 NSTextTab 添加点击手势?我必须在单击选项卡时执行一些操作。
【解决方案2】:

在 Swift 4.2 或更高版本中

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.tabStops = [NSTextTab.init(textAlignment: .left, location: 150, options: [:])]
paragraphStyle.headIndent = 150

let attributedTitle = NSAttributedString(string: "Some Title", attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14.0), NSAttributedString.Key.paragraphStyle: paragraphStyle])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2012-12-22
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多