NSTextTab制表符停止在UITextView的NSAttributed String中无效

问题描述 投票:0回答:1

[使用属性字符串填充UITextView时,字符串中的制表符未将文本与我尝试设置的制表符对齐。

字符串的第一行是标头(粗体系统字体),没有制表位(或制表符),其余行用斜体表示,并且每行应有两个制表位。这些行中有两个制表符,用于使文本与制表位的预定位置对齐。

但是,当我将属性字符串分配给文本视图的attribtuedText时,后面的行会以斜体显示为OK,但是制表符停止位似乎会被忽略。选项卡字符显然在默认选项卡处停止了文本,好像我从未设置任何选项卡处一样。

我的代码在下面,标签的实现受以下启发:How do I add tab stops to an NSAttributedString and display in a UITextView

我在做什么错,我应该如何使其按预期工作?

        let str = "\t1555445\tSomethings\n\t10\tOther Things\n\t2882\tOf Something Else"
        let paraStyle = NSMutableParagraphStyle()
        let rightTab = NSTextTab(textAlignment: .right, location: 100, options: [:])
        let leftTab = NSTextTab(textAlignment: .left, location: 150, options: [:])
        paraStyle.addTabStop(rightTab)
        paraStyle.addTabStop(leftTab)

        let headingAttrs = [NSAttributedString.Key.foregroundColor: UIColor.label,
                            NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 14),
        ]
        let attrs = [NSAttributedString.Key.foregroundColor: UIColor.label,
                         NSAttributedString.Key.font: UIFont.italicSystemFont(ofSize: 14),
                         NSAttributedString.Key.paragraphStyle: paraStyle,
        ]

        let attrString = NSMutableAttributedString(string: "Some Heading:\n\n" , attributes: headingAttrs as [NSAttributedString.Key : Any])
        attrString.append(NSAttributedString(string: str, attributes: attrs as [NSAttributedString.Key : Any]))
        someTextView.attributedText = attrString

以下是一些截图说明了此问题。 (这些是在页面中创建的模型,而不是直接将内容添加到UITTextView的模型,因为我现在不在开发/测试环境中。)

我想要的是:

Tab characters aligned to custom tab stops

但是我得到的是:

Tab characters aligned to default tab spacing

swift uitextview nsmutableattributedstring
1个回答
0
投票

查看文档会发现默认情况下,段落样式每28点都有一个制表位。

所以,与其简单地添加制表位:

paraStyle.addTabStop(rightTab)
paraStyle.addTabStop(leftTab)

我应该将所有默认的制表位替换为:

paraStyle.tabStops = [rightTab,leftTab]
© www.soinside.com 2019 - 2024. All rights reserved.