My current solution is:
<code>extension NSAttributedString {
func height(with font: UIFont, forWidth width: CGFloat) -> CGFloat {
let view = UITextView(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude))
view.textContainer.lineFragmentPadding = 0
view.textContainerInset = .zero
view.setDynamicFont(font)
view.attributedText = self
view.isScrollEnabled = false
view.sizeToFit()
return view.frame.height
}
}
</code>
<code>extension NSAttributedString {
func height(with font: UIFont, forWidth width: CGFloat) -> CGFloat {
let view = UITextView(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude))
view.textContainer.lineFragmentPadding = 0
view.textContainerInset = .zero
view.setDynamicFont(font)
view.attributedText = self
view.isScrollEnabled = false
view.sizeToFit()
return view.frame.height
}
}
</code>
extension NSAttributedString {
func height(with font: UIFont, forWidth width: CGFloat) -> CGFloat {
let view = UITextView(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude))
view.textContainer.lineFragmentPadding = 0
view.textContainerInset = .zero
view.setDynamicFont(font)
view.attributedText = self
view.isScrollEnabled = false
view.sizeToFit()
return view.frame.height
}
}
And this is called from every cell (using custom cell in MessageKit pod, so do not offer using automatic height;-)):
let message = //(message is delivered to the cell)
let height = message.attributedText.height(with: font, forWidth: widthForText)
but that solution cause lag when scrolling my view;) Is there a way to speed it up?
Recognized by Mobile Development Collective