Irohabook
0
4074

SwiftのUITextView(Auto Layoutつき)の高さを可変にする

UITextViewの高さを中身によって変える場合、ポイントは2つある。

  • 最初に上下左右の制限をつける
  • スクロールを不可にする

UITextViewの上下左右にAuto Layoutを設定する。どれか一つでも欠けるとたぶんうまくいかない。

続いてisScrollEnabled = falseをつける。Swift 4ではisScrollEnabledだ。scrollEnabledではない。

sizeToFit、contentSize.heightなどはまったく関係ない。constraint(equalToConstant: height).isActive = trueと高さを直接指定することも解決にならない。

上下左右のすべてに制限をつけて、その後でスクロールを不可にする。スクロールを不可にしてから上下左右に制限をつけてもうまくいかない。

マージン(パディング)をさらに設定する

実際はマージンを設定することが多い。マージンは

v.textContainerInset = UIEdgeInsets(top: 24, left: 24, bottom: 24, right: 24)

などと設定する(vはUITextViewのこと)。つまりUITextViewをマージンつきで高さを可変にしたいときは

  • 最初に上下左右の制限をつける
  • スクロールを不可にする
  • textContainerInsetをUIEdgeInsetsで設定する

とする。

追記

上下左右の制限をつけて、スクロールを不可にすると、UITextViewの高さが決定する。つまり高さを取得できるようになる。

オートレイアウトなしで高さを設定したいときは、たぶんcontentSizeあたりで高さを設定できる。かもしれない。

次の記事

UIView