如何创建基本上是水平分隔符的NSAttributedString,例如HTML的<hr>
标记?
我试过了:
NSAttributedString *hr = [[NSAttributedString alloc] initWithHTML:
[NSData
dataWithBytes:"<html><body><hr>hi</body></html>"
length:strlen("<html><body><hr>hi</body></html>")]
documentAttributes:NULL];
但是,<hr>
标记不会出现。将字符串添加到我的视图可以正常工作,因为我可以看到hi
。
答案 0 :(得分:7)
这是一个相当古老的问题,但我认为值得更充分地回答。
获取水平规则的一种简单方法是设置一个段落,其中包含一个所需规则长度的制表位,其对齐方式设置为居中。然后将文本设置为U+00A0 U+0009 U+00A0
并在文本上设置删除线属性。规则的长度由制表位的位置设置。这具有使用复制和粘贴开箱即用的显着优势 - 实际上还有其他使用文本系统的程序。
另一种可行的方法,如果您希望(例如)使用文本扩展的水平规则,则将NSTextAttachment
与自定义单元格一起使用。单元格传递一个线段矩形,可以根据需要设置自己的帧。 FWIW,您不必使用NSTextAttachment
的图像;你的手机可以做自定义绘图。但是,您将遇到的问题是复制和粘贴将根据附件内容设置单元格类型(这是有道理的,因为您的自定义单元格在其他应用程序中不可用)。您可以采用混合方法并将图像设置为附件,同时在应用程序中进行自定义渲染;镀金版本可能会在PNG附件中使用自定义标签,以表明它应该是自定义渲染的。
您也可以使用NSTextTable
来绘制规则 - 我没有尝试过这种方法,但我怀疑它可以很容易地工作。
最后,您可以选择执行Kevin建议 - 使用NSLayoutManager
计算合适的位置并自行渲染。
答案 1 :(得分:1)
你将不得不亲自画画。 <hr>
不是文字,也不是修改文字的属性。因此,NSAttributedString无法表示它,并且Cocoa文本系统或CoreText无法绘制它。
答案 2 :(得分:1)