hou*_*oft 3 html cocoa nsattributedstring separator osx-lion
我怎样才能创建一个基本上是水平分隔符的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];
Run Code Online (Sandbox Code Playgroud)
但是,<hr>标签不会出现.将字符串添加到我的视图可以正常工作,因为我可以看到hi.
这是一个很老的问题,但值得我更充分地回答.
获取水平规则的一种简单方法是使用所需规则长度的制表位设置一个段落,并将其对齐设置为居中.然后将文本设置为U+00A0 U+0009 U+00A0并在文本上设置删除线属性.规则的长度由制表位的位置设置.这具有开箱即用的复制和粘贴的显着优点 - 实际上与使用文本系统的其他程序一起使用.
另一种方法是,如果你想(例如)一个随文本扩展的水平规则,则使用NSTextAttachment自定义单元格.单元格传递一个线段矩形,可以根据需要设置自己的帧.FWIW,您不必使用图像NSTextAttachment; 你的手机可以做自定义绘图.但是,您将遇到的问题是,复制和粘贴将根据附件内容设置单元格类型(这是有道理的,因为您的自定义单元格在其他应用程序中不可用).您可以采用混合方法并将图像设置为附件,同时在应用程序中进行自定义渲染; 镀金版本可能会在PNG附件中使用自定义标签,以表明它应该是自定义渲染的.
您也可以使用NSTextTable绘制规则 - 我没有尝试过这种方法,但我怀疑它可以很容易地工作.
最后,您可以选择做凯文建议的事情 - 使用NSLayoutManager自己计算合适的位置并自行渲染.
你必须自己画它。<hr>不是文本,也不是修改文本的属性。因此,NSAttributedString 无法表示它,并且 Cocoa 文本系统或 CoreText 没有工具来绘制它。