Swift UITextViewの高さを入力内容に合わせて変える方法
StoryBoard
Delegate メソッド
extension DiaryCreateController: UITextViewDelegate{ //frexble textView func textViewDidChange(_ textView: UITextView) { let size = CGSize(width: textView.frame.width, height: .infinity) //指定された適切なサイズを返却する let estimatedSize = textView.sizeThatFits(size) //高さの入れ物を用意しておく let expectedHeigth: CGFloat switch estimatedSize.height { //40-140の間は、フレキシブル case 44...140: expectedHeigth = estimatedSize.height //それ以外は、44以下なら44を そうでないなら140を返却 default: expectedHeigth = estimatedSize.height < 44 ? 44 : 140 } textView.constraints.first(where: { $0.firstAttribute == .height })?.constant = expectedHeigth //140以上の高さのときはスクロール止める textView.isScrollEnabled = expectedHeigth < 140 }
.sizeThatFits
指定されたサイズに最適なサイズを計算して返すようにビューに要求します。
.isScrollEnabled
tureならスクロールする
falseならスクロール止める
.firstAttribute where で条件の絞り込み
制約に参加している最初のオブジェクトの属性
textView.constraints は [NSLayoutConstraint]型
StoryBoardはあまり好きになれない。次回からコードで書くか、SwiftUIに変更しようと思う