今回のやりたいこと

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

これでうまく動的に高さの変更ができた。

めでたし、めでたし。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.