将字体属性添加到HTML呈现的UILabel swift

时间:2017-06-12 12:40:06

标签: html ios swift uilabel nsattributedstring

我有一些HTML内容,我想在我的原生UILabel中呈现,但除此之外,我必须为该UILabel添加自定义字体。我正在使用NSAttributedString来执行此操作并使用以下代码在我的UILabel中呈现HTML内容。

 func htmlAttributedString() -> NSAttributedString? {
    guard let data = self.data(using: .utf16, allowLossyConversion: false) else {
        return nil
    }
    guard let html = try? NSMutableAttributedString(
        data: data,
        options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil) else { return nil }


    let attributes = [
        NSForegroundColorAttributeName: UIColor.lightGray,
        NSFontAttributeName : UIFont.systemFont(ofSize: 12)
    ]
    html.setAttributes(attributes, range: NSRange(0..<html.length))

    return html
}

var str = "Here is the <bold>string</bold> that i want to be bold.
messageLabel.attributedText = str.htmlAttributedString()

这里的问题是当我在HTML呈现的属性字符串上应用字体属性时。然后丢失所有像粗体的HTML格式。

那么有没有办法可以在HTML呈现的属性字符串上应用一些选定的字体

1 个答案:

答案 0 :(得分:0)

根据您的要求更换字体。

func htmlAttriButedText(str : String) -> NSAttributedString{
        let attrStr = try! NSMutableAttributedString(
            data: str.data(using: String.Encoding.utf8, allowLossyConversion: true)!,
            options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil)
        attrStr.addAttribute(NSForegroundColorAttributeName, value: lightTextColor, range: NSMakeRange(0, attrStr.length))
        attrStr.addAttribute(NSFontAttributeName, value: UIFont.boldSystemFont(ofSize: 13), range: NSMakeRange(0, attrStr.length))
        return attrStr
    }