美文网首页
Swift 通过Label 或 TextView加载HTML文本

Swift 通过Label 或 TextView加载HTML文本

作者: Alter桐 | 来源:发表于2021-01-12 16:08 被阅读0次

    一开始以为在Label或者UITextview 加载HTML 通过

    NSAttributedString *attStr = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType} documentAttributes:nil error:nil];
    

    方法直接转换就可以了后来发现坑还是有一些的,于是做个整理
    对了这个是oc的swift的方式是

    let html = "自己设置HTML串"
    let data = html.data(using: .unicode)
    let attributedString = NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
    

    计算高度
    一定注意要转成 characterEncoding类型
    在计算size

    let html = "自己设置HTML串"
    let htmlData = html.data(using: .utf8)
    let attstring = try? NSMutableAttributedString(data: htmlData, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: Int()], documentAttributes: nil)
    let htmlSize = attstring?.boundingRect(with: size, options: [.usesLineFragmentOrigin], context: nil).size
    

    注意一点是文本转换和高度的转换data用到的 using是不同的一定注意

    最后就是成功了 截屏2021-01-12 下午4.05.08.png

    如果单纯的只是静态页面展示这个方法可以。
    如果是需要在单元格展示滑动会卡顿 主要是HTML转data会阻塞线程
    所以应该放在异步线程加载一个要注意

    let html = "自己设置HTML串"
    DispatchQueue.global().async {
                        if let data = html.data(using: .unicode) {
                            let attributedString = NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil)
                            let size = CGSize(width: 275, height:CGFloat.greatestFiniteMagnitude)
                            let attstring = try? NSMutableAttributedString(data: htmlData, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: Int()], documentAttributes: nil)
                            guard let htmlSize = attstring?.boundingRect(with: size, options: [.usesLineFragmentOrigin], context: nil).size else { return }
                            DispatchQueue.main.async {
                              //处理回到主线程事件
                            }
                        }
                    }
    

    还有个重点,我看了几个博客说是如果是有图片高度计算不精准,本人也测了一下,图片是没问题的会跟着图片大小调整高度的计算还是精准的。
    项目比较简单就不给demo了如果有需要可以私聊。谢谢大家

    相关文章

      网友评论

          本文标题:Swift 通过Label 或 TextView加载HTML文本

          本文链接:https://www.haomeiwen.com/subject/nrfeaktx.html