我正在使用UIWebView
的一个实例来处理一些文本并正确地给它上色,它给出的结果是HTML,但是我不想在UIWebView
中显示它,而是想使用带有NSAttributedString
的Core Text
来显示它。
我可以创建和绘制NSAttributedString
,但我不确定如何将其转换和映射为属性字符串。
我知道在Mac下,NSAttributedString
有一个initWithHTML:
方法,但这是一个只在Mac上添加的方法,不适用于iOS。
我也知道有一个类似的问题,但它没有答案,我想我会再试一次,看看是否有人创造了一个方法来做到这一点,如果是,如果他们可以分享它。
发布于 2013-09-19 13:21:28
在iOS 7中,UIKit添加了一个initWithData:options:documentAttributes:error:
方法,该方法可以使用HTML语言初始化NSAttributedString
,例如:
[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
documentAttributes:nil error:nil];
在Swift中:
let htmlData = NSString(string: details).data(using: String.Encoding.unicode.rawValue)
let options = [NSAttributedString.DocumentReadingOptionKey.documentType:
NSAttributedString.DocumentType.html]
let attributedString = try? NSMutableAttributedString(data: htmlData ?? Data(),
options: options,
documentAttributes: nil)
发布于 2011-01-11 07:03:42
Github上有一个Oliver Drobnik正在开发的open source addition to NSAttributedString。它使用NSScanner进行HTML解析。
发布于 2016-05-25 11:23:33
这是一个用Swift编写的String
扩展,用于返回NSAttributedString
形式的HTML字符串。
extension String {
func htmlAttributedString() -> NSAttributedString? {
guard let data = self.dataUsingEncoding(NSUTF16StringEncoding, allowLossyConversion: false) else { return nil }
guard let html = try? NSMutableAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) else { return nil }
return html
}
}
要使用,
label.attributedText = "<b>Hello</b> \u{2022} babe".htmlAttributedString()
在上面的代码中,我特意添加了一个unicode \u2022,以显示它正确地呈现unicode。
小问题:NSAttributedString
使用的默认编码是NSUTF16StringEncoding
(而不是UTF8!)。
https://stackoverflow.com/questions/4217820
复制相似问题