基本上APP都具有展示文章的功能,有时候添加文章的途径不仅仅是通过APP,有可能是通过web端添加的,通过web端添加进行排版会包含HTML标签以及样式,如果后台返回给我们的是完整的HTML,我们可以通过webview去加载,但是我遇到的情况是只是HTML的一部分包含HTML标签的文字内容,例如:
<p>
<span style="color: #333333; font-family: 'microsoft yahei', simhei;
font-size: 16px; line-height: 28.8px; text-indent: 30px;">
今日,GMIC 2016正式在北京开幕,开幕仪式上,中关村发展集团总经理周云帆作了致辞演讲,他表示,
“据统计2015年仅在这一年里面,中关村新创办的科技型企业达到了2.1万余家,很大一部分都是“互联
网+”的企业。中关村的建设目标是到2020年要建设成为具有全球影响力
的科技创新中心。”
</span>
</p>
APP进行展示的时候,UILabel并不会主动去解析这些含有HTML元素的东西,显示的内容显然不是我们想要的结果。这个时候我就联想到了使用强大的属性字符串去解析,果然就找到了相应的方法:
Objective-C代码:
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc]
initWithData:[string dataUsingEncoding:
NSUnicodeStringEncoding]
options:@{
NSDocumentTypeDocumentAttribute:
NSHTMLTextDocumentType
}
documentAttributes:nil error:nil];
self.articelContent.text = [attrStr string];
swift代码:
let attr = try? NSMutableAttributedString(data: data, options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
通过属性字符串进行解析后,如果直接把属性字符串赋给UILabel的attributedText属性就会显示出相应的HTML样式,如果我们不需要这些样式,而是统一显示,可以通过属性字符串获取string赋值给UILabel的text,从而不会显示HTML的样式:self.articelContent.text = [attrStr string];。