计算UITextView中的html内容高度失败

时间:2018-08-29 03:43:23

标签: ios swift uitextview nsattributedstring

我正在使用带有自定义单元格的UITableView将HTML代码呈现为带有AttributedString的UITextView。 UITextView适合单元格,我正在使用自动布局以根据UITextView的内容获取动态高度。

我用于示例的html是

<h1>hey this is a <a href="www.google.com">link</a><h1>

似乎发现高度不正确。

enter image description here

我还尝试使用

根据字符串确定内容的高度
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let text = content[indexPath.row]
    let tv = UITextView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bouds.width - 16 * 2, height: 1.0))
    tv.isScrollEnabled = false
    tv.textContainerInset = UIEdgeInsets.zero
    tv.textContainer.lineFragmentPadding = 0
    let height = TextContentCell.calculateHeight(textView: tv, data: text).height
    return height
}

calculateHeight函数:

class func calculateHeight(textView:UITextView, data:String) -> CGRect {

    var newFrame:CGRect!
    do {
        let attr = try NSAttributedString(data: data.data(using: String.Encoding.utf8)!, options: [NSAttributedString.DocumentReadingOptionKey.documentType : NSAttributedString.DocumentType.html,NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
        textView.attributedText = attr
    } catch {
        //Handle Exceptions
    }

    let fixedWidth = textView.frame.size.width
    textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
    let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
    newFrame = textView.frame
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
    print("height \(newFrame.height)")
    return newFrame
}

此技术似乎返回的高度与动态高度返回的高度完全相同。

enter image description here

此问题出现在html文本没有常规文本的情况下。

enter image description here

0 个答案:

没有答案