我正在尝试通过NSAttributedString加载HTML文件,以便在UITextView中显示。
那么,我如何将CSS应用于文本视图的内容?
答案 0 :(得分:29)
从iOS 7开始,您可以使用NSAttributedString
HTML语法:
NSURL *htmlString = [[NSBundle mainBundle] URLForResource: @"string" withExtension:@"html"];
NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithFileURL:htmlString
options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
documentAttributes:nil
error:nil];
textView.attributedText = stringWithHTMLAttributes; // attributedText field!
您必须将string.html添加到项目中,并且html的内容可以是这样的:
<html>
<head>
<style type="text/css">
body {
font-size: 15px;
font-family: Avenir, Arial, sans-serif;
color: red;
}
</style>
</head>
<body>
<p>This is the text</p>
</body>
</html>
根据我的测试结果,您可以更改:color,font-family,font-weight,font-size,text-align,并使用<b>
,<strong>
,<i>
,<u>
,<sup>
和<sub>
代码。
答案 1 :(得分:0)
如果您将文件存储在Assets文件夹中,则无需在多个文件中重复CSS,则一个选择是在body标签之前包含一个包含所有样式信息的html文件。然后,您可以从我自己的代码中附加字节,如本示例所示:
func loadHTMLData(section:String, page:Int) -> NSAttributedString? {
var data = Data()
if let asset = NSDataAsset(name: "htmlhead") {
data.append(asset.data)
}
if let asset = NSDataAsset(name: "\(section)\(page)") {
data.append(asset.data)
do {
let attr = try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
return attr
}
catch {
// do something with error
return nil
}
}
else {
return nil
}
}
如果您愿意,也没有什么可以阻止您进一步拆分文件。