雑学1472593 views
高校日本史189857 views
LaTeX957300 views
中学社会667106 views
小学社会308636 views
世界の国560595 views
小学理科717236 views
英語607877 views
高校生物549842 views
中学英語808712 views
Help
Tools

English

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あたりで高さを設定できる。かもしれない。