我从服务器获取一些HTML样式的文本,我需要将其显示为UILabel
或UITextView
的attributedText。
html可能包含简单的<em>
,<b>
,<u>
标记以及<font>
标记,用于为文本各部分指定不同的颜色。
首先,我采用了将HTML字符串转换为数据的简单方法,并使用NSAttributedString
来适当地初始化init(data:options:documentAttributes:)
。
这可以正常工作,除了它将文本视图的字体覆盖到一些看起来非常小的Times New Roman。
基于this blog post上的代码,我决定在整个事物中添加一个样式标记,以便设置默认字体系列和磅值:
func htmlAttributed(family: String?, size: CGFloat) -> NSAttributedString? {
do {
let htmlCSSString = "<style>" +
"html *" +
"{" +
"font-size: \(size)pt !important;" +
"font-family: \(family ?? "Helvetica"), Helvetica !important;" +
"}</style> \(self)"
guard let data = htmlCSSString.data(using: String.Encoding.utf8) else {
return nil
}
return try NSAttributedString(
data: data,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue],
documentAttributes: nil)
} catch {
print(error.localizedDescription)
return nil
}
}
原始代码还有一个额外的参数,用于在前缀<style>
标记中指定文本颜色,但我将其删除,因为我的html内容指定了单独<font>
内的文字颜色文本中的标签。
这可以完成工作,但我还有一个问题:文本的默认颜色呈现黑色,我需要它是一个较浅的灰色阴影。
如果我将color参数重新设置为样式标记:
let htmlCSSString = "<style>" +
"html *" +
"{" +
"font-size: \(size)pt !important;" +
"color: #\(color.hexString) !important;" + // <- THIS
"font-family: \(family ?? "Helvetica"), Helvetica !important;" +
"}</style> \(self)"
然后整个文本获得相同的颜色,内联标签如:
<font color="FF0000">red text</font>
被忽略。
如何指定不同于黑色的默认颜色,并使用<font>
标记仍然具有每段颜色?
答案 0 :(得分:1)
从代码中删除!important
并将<font>
标记替换为<span>