NSAttributedString 无法从 DTCoreText 解析 CTForegroundColor 属性

NSAttributedString can not parse CTForegroundColor attribute from DTCoreText

我正在使用 DTCoreText 创建 HTML 属性字符串。 DTCoreText 返回的属性字符串有一个名为 "CTForegroundColor" 的属性,其中包含文本颜色信息。当我在 UI 上显示文本时,它与属性中提到的颜色不同。如果我用苹果的标准方法就可以了。

代码片段:

1.使用 DTCoreText

let stringBuilder : DTHTMLAttributedStringBuilder  = DTHTMLAttributedStringBuilder.init(html: encodedData, options: nil, documentAttributes: nil)

return stringBuilder.generatedAttributedString()!

输入字符串:

"<style>body{font-family: \'Helvetica\'; font-size:22.000000px;}</style><font color = \"#EB1D1D\">Earn Instantly!</font>"

输出属性字符串:

立即赚钱!{ CTForegroundColor = " [ (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; 扩展范围)] ( 0.921569 0.113725 0.113725 1 )"; NSFont = " font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 22.00pt"; NSParagraphStyle = "{base 书写方向=-1,对齐方式=4,换行方式=0,默认制表符间隔=36\nfirst行头缩进=0,头部缩进=0,尾部缩进=0\nline高度倍数=0,最大行高=0,最小行高=0\nline间距调整=0,段落间距=0,段落前间距=0\n}"; }

2。使用苹果标准方法时:

return try NSAttributedString(data: encodedData,
                                              options: [.documentType: NSAttributedString.DocumentType.html,
                                                        .characterEncoding: String.Encoding.utf8.rawValue],
                                              documentAttributes: nil)

输出属性字符串:

立即赚钱!{ NSColor = "kCGColorSpaceModelRGB 0.921569 0.113725 0.113725 1 "; NSFont = " font-family: \"Helvetica\"; font-weight: normal; font-style: normal; font-size: 22.00pt"; NSKern = 0; NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 27/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0"; NSStrokeColor = "kCGColorSpaceModelRGB 0.921569 0.113725 0.113725 1 "; NSStrokeWidth = 0; }

因为我在使用 Apple 的标准方法时遇到太多崩溃,所以我想转移到 DTCoreText。

将以下代码添加到选项参数有效!!

let options = [DTUseiOS6Attributes : true] as [String : Any]

原因是将上述属性设置为 true 会使用 NSForegroundColorAttributeName(仅 iOS 6.0 及更高版本可用)而不是默认的 kCTForegroundColorAttributeName。