【问题标题】:Rendering HTML on UITableViewCell in iOS在 iOS 中的 UITableViewCell 上渲染 HTML
【发布时间】:2018-12-22 11:31:07
【问题描述】:

我需要渲染HTML,它可以在UITableView 的不同单元格上包含图像、文本。我的数据源是 HTML 内容,我很可能需要在 UITableViewCell 上呈现。

我也尝试过 UILabelUITextView 上的属性字符串,但它们在滚动 UITableView 时也效果不佳 我试过这个,但无法获得不同类型细胞的帮助。

我也尝试过https://github.com/Vugla/PSHTMLView,但这有一些问题,例如它仅有助于将相似的单元格出列(我需要具有不同 html 的单元格)

我将不胜感激任何帮助。 指针也会有帮助:)

【问题讨论】:

    标签: html ios swift rendering


    【解决方案1】:
    self.heightUITextView.constant = self.newStoryTextView.contentSize.height/2
    

    这里heightUITextView 是我的高度限制,newStoryTextView 是我的 UITextView

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! YourTableViewCell
    
                cell.heightUITextView.constant = self.newStoryTextView.contentSize.height/2
                cell.view.setNeedsLayout()
                return cell
        }
    

    你的表格单元:

    class YourTableViewCell : UITableViewCell {
    
        @IBOutlet weak var viewHeight: NSLayoutConstraint!
    
    }
    

    【讨论】:

    • 发表评论。如果您正在增加 taxtview 的大小,则无需在表格视图中使用,那么您需要刷新主视图。
    • 你正在添加图片路径?
    【解决方案2】:

    我遇到过类似的用例,总是很痛苦。所以,我主要可以想到两个选择:

    1. 使用可用的原生 API。

    您可以像这样将 HTML 转换为属性字符串(参见 Convert HTML to NSAttributedString in iOS):

    let htmlData = NSString(string: details).data(using: String.Encoding.unicode.rawValue)
    let options = [NSAttributedString.DocumentReadingOptionKey.documentType:
        NSAttributedString.DocumentType.html]
    let attributedString = try? NSAttributedString(data: htmlData ?? Data(),
                                                          options: options,
                                                          documentAttributes: nil)
    

    但是,这很慢,并且当与UITableViewCell 结合使用时,可能会导致异常崩溃。我想原因是原生 HTML 解析器必须加载 WebKit 并在后台线程或队列上解析 HTML,这与 UITableViewCell 渲染管道不能很好地配合。所以,如果你走这条路,我建议预处理 HTML(并缓存它)并让 UITableViewCell 使用属性字符串作为数据源。

    1. 使用第三方库。

    DTCoreText (https://github.com/Cocoanetics/DTCoreText) 似乎可以解决它,但您应该注意许可。

    如果您只想去除 HTML 标签,您可以使用 Google 的此扩展程序 https://chromium.googlesource.com/external/github.com/google/google-toolbox-for-mac/+/refs/heads/master/Foundation/GTMNSString+HTML.h

    【讨论】:

    • 你的解决方案 1 很痛苦。我会尝试解决方案 2,谢谢。你能解释一下我们所说的许可是什么吗?
    • 我不是许可方面的专家,但似乎您必须在您的应用中提及作者或支付 75 欧元。这是完整的文件:github.com/Cocoanetics/DTCoreText/blob/develop/LICENSE 自述文件中提到了 75 欧元。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2020-10-24
    • 2011-06-10
    • 2011-10-22
    相关资源
    最近更新 更多