我尝试根据它来计算UITextView自适应字符串的高度。
let textView = UITextView()
textView.frame = CGRect(x: 0, y: 0, width: width - 2 * margin, height: CGFloat.greatestFiniteMagnitude)
textView.font = WDFontManager.regularFont(withSize: 14)
textView.attributedText = NSAttributedString(string: content, attributes: contentAttributes)
textView.textContainer.widthTracksTextView = false
textView.textContainer.lineFragmentPadding = 0
textView.textContainerInset = UIEdgeInsets.zero
textView.textContainer.exclusionPaths = [UIBezierPath(rect: CGRect(x: 0, y: 0, width: 60, height: 60))]
//Method 1
textView.layoutManager.ensureLayout(for: textView.textContainer)
let rect = textView.layoutManager.usedRect(for: textView.textContainer)
let textHeight = ceil(rect.height)
//Method 2
let newSize = textView.sizeThatFits(CGSize.init(width: width - 2 * margin, height: CGFloat(MAXFLOAT)))
let hightSize = ceil(newSize.height)
在正常情况下没有问题。
但是包含电子邮件表情符号和特殊字符(例如:#),此方法将被计算错误。
我想问一下是否有更准确的方法来解决这个问题。