Ios 带制表符的NSAttribute字符串

Ios 带制表符的NSAttribute字符串,ios,objective-c,nsattributedstring,Ios,Objective C,Nsattributedstring,如何使用这种文本格式创建ui标签?您会使用NSAttribute字符串吗 NSAttributedString可以创建带制表位的文本列。这类似于在具有相同限制的字处理器中执行的方式 let text = "Name\t: Johny\nGender\t: Male\nAge\t: 25\nFavourites\t: Reading, writing" let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.tabStops =

如何使用这种文本格式创建
ui标签
?您会使用NSAttribute字符串吗


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
告诉标签包装文本需要按固定数量缩进,因此它会包装到下一行

这种方法的局限性是:

  • 制表位位置是一个固定的点值,因此您需要知道您想要什么。如果为某些行拾取的值小于第一列的宽度,则这些行将缩进到不同的位置
  • 只有当最后一列是包装的列时,包装才真正起作用。因为您的第二列的开头是“:”您可以只增加
    头缩进,也可以拆分“:”to be
    \t:\t
    ,然后设置第二个制表位。如果你不让文本换行,这不是一个问题

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

    在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])
    

    这更多地与布局有关,即字符属性,因此我认为它不适合
    NSAttributedString
    。您应该研究使用布局约束。自动布局约束肯定会帮助您复制如何为NSTextTab添加点击手势?我必须在单击选项卡时执行一些操作。