如何将 HTML 的 CSS 添加到 NSAttributedString?

Posted

技术标签:

【中文标题】如何将 HTML 的 CSS 添加到 NSAttributedString?【英文标题】:How to add CSS for HTML to NSAttributedString? 【发布时间】:2014-02-28 09:05:58 【问题描述】:

我正在尝试通过 NSAttributedString 加载 html 文件以将其显示在 UITextView 中。

那么,如何将 CSS 应用于文本视图的内容?

【问题讨论】:

我猜你不能将css应用到textview,而是用html文件在webview中显示你的内容。 @Virussmca 但我必须使用 textview 。 . . @Quintin 感谢您的编辑。 你不能应用所有的CSS属性(比如border-left: 10px solid #000000;等等) 【参考方案1】:

ios 7 开始,您可以使用带有 HTML 语法的 NSAttributedString

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> 

根据我的测试,您可以更改:颜色、字体系列、字体粗细、字体大小、文本对齐,并使用 &lt;b&gt;&lt;strong&gt;&lt;i&gt;&lt;u&gt;、@ 987654328@ 和 &lt;sub&gt; 标签。

【讨论】:

@AndréRodrigues 你知道我在哪里可以找到可能的定制列表吗?我正在尝试为列表使用自定义图标 ( ...)。 我们可以应用外部 css,如果可以,那么如何? 可以改变链接的颜色吗? @Mansuu.... 是的,您可以将 css 放在单独的文件中,您可以在 HTML 中设置 css 文件的相对路径。 @KlemenZagar 我认为这是可能的,但最好的确认方法是尝试一下 :)【参考方案2】:

与其在多个文件中重复您需要的 css,如果您将文件存储在 Assets 文件夹中,那么一种选择是在包含所有样式信息的 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
    

如果您愿意,也没有什么可以阻止您进一步拆分文件。

【讨论】:

以上是关于如何将 HTML 的 CSS 添加到 NSAttributedString?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML 和 CSS 添加到 PDF [关闭]

如何将 CSS 类或 id 添加到 Html.PagedListPager

如何将我计算机上的图像添加到 css 或 html 中的站点?

angular2:如何按条件手动将css文件添加到index.html?

如何将样式添加到 base.html:Django 框架?

html+css如何在图片上添加文字