我正在开发一个RSS应用程序,我正在尝试将我从RSS库中获取的所有HTML转换为具有每个相应HTML元素的指定属性的NSMutableAttributedString,因此我可以在UITextView中显示它。
例如:
<p>Lorem Ipsum</p> *has the font* UIFont.systemFont(ofSize: 17.0)
和
<h1>Lorem Ipsum </p> *has the font* UIFont.boldSystemFont(ofSize: 20.0)
目前我正在将我的HTML转换为带有扩展名
的属性字符串extension String {
var htmlAttributedString: NSMutableAttributedString? {
do {
let attrStr = try NSMutableAttributedString(
data: (self.data(using: String.Encoding.unicode, allowLossyConversion: true)!),
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
return attrStr
} catch let error {
print(error)
}
return nil
}
}
然后我可以通过以下方式枚举属性:
htmlText.enumerateAttributes(in: fullRange, options: [], using: {
attrs, range, _ in
for (attribute, object) in attrs {
if attribute == NSFontAttributeName {
htmlText.removeAttribute(attribute, range: range)
htmlText.addAttribute(NSFontAttributeName, value: UIFont.boldSystemFont(ofSize: 18.0), range: range)
}
}
})
这让我能够创建一个可以填充UITextView的字符串以及更新该字符串属性的能力,但是我无法弄清楚如何实际区分不同的HTML元素以便我可以给每个人相应的属性。