Swift:在标签或文本视图中显示 HTML 数据

新手上路,请多包涵

我有一些 HTML 数据,其中包含标题、段落、图像和列表标签。

有没有办法在一个 UITextViewUILabel 中显示这些数据?

原文由 Talha Ahmad Khan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 978
2 个回答

对于斯威夫特 5:

 extension String {
    var htmlToAttributedString: NSAttributedString? {
        guard let data = data(using: .utf8) else { return nil }
        do {
            return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil)
        } catch {
            return nil
        }
    }
    var htmlToString: String {
        return htmlToAttributedString?.string ?? ""
    }
}

然后,每当您想将 HTML 文本放入 UITextView 时,请使用:

 textView.attributedText = htmlText.htmlToAttributedString

原文由 Roger Carvalho 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是一个 Swift 3 版本:

 private func getHtmlLabel(text: String) -> UILabel {
    let label = UILabel()
    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.attributedString = stringFromHtml(string: text)
    return label
}

private func stringFromHtml(string: String) -> NSAttributedString? {
    do {
        let data = string.data(using: String.Encoding.utf8, allowLossyConversion: true)
        if let d = data {
            let str = try NSAttributedString(data: d,
                                             options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
                                             documentAttributes: nil)
            return str
        }
    } catch {
    }
    return nil
}

我在这里发现了其他一些答案的问题,我花了一些时间才把它弄对。我设置了换行模式和行数,以便当 HTML 跨越多行时标签大小合适。

原文由 garie 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题