今回のやりたいこと
UITextViewの内容は、Web経由で取得する。
内容の長さは様々である。
それに合わせて、UITextViewの高さを動的に変更したい。
方法
まずはUITextViewDelegateのtextViewDidChange()でtextの内容が変わったら呼び出されるので、その時に高さの設定する方法を試した。
extension ViewController: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
var frame = textView.frame
frame.size.height = textView.contentSize.height
textView.frame = frame
}
}
これだと、UITextView.textに文章を設定しても呼び出されなかった。
(本来なら、呼び出されるはずなんだけど。。。)
次にUITextView.sizeThatFits()で高さを動的に取得する方法で試した。
let height = textView.sizeThatFits(CGSize(width: textView.frame.size.width, height: CGFloat.greatestFiniteMagnitude)).height
textView.heightAnchor.constraint(equalToConstant: height).isActive = true
これでうまく動的に高さの変更ができた。
めでたし、めでたし。