UIStackView内にUITextViewを追加しました。
しかし、私のテキストビューはマルチラインではありません。
自動レイアウトは次のように表示されます。
画像によると、1行だけです。画像のようにフレーム外として表示されるテキストビューフレーム。
UITextView
UIStackView
問題は、topおよびbottomの制約を与えることにより、IStackviewのheight
を修正したことです。
テキストビューのスクロールを無効にします。
textviewを自分自身に委任し、実装しますtextViewDidChange
スイフト
func textViewDidChange(_ textView: UITextView) {
view.layoutIfNeeded()
}
Objective C:
-(void)textViewDidChange:(UITextView *)textView {
[self.view layoutIfNeeded];
}
このメソッドが呼び出されることを確認してください。
これで、スタックビューはテキストビューとともに複数行に拡大するはずです。
次に、テキストビューが複数行ではない理由は、高さを固定しているためです。したがって、複数行になることはありません。
GIFを参照してください:
スタックビューが十分に制約されている限り、isScrollEnabled
でfalse
をUITextView
に設定すると、スタックビュー内でサイズを変更できます。
これまでに私が見つけた最善の解決策は、UITextViewをUIViewでラップしてから、高さアンカーを使用してUITextViewの固定高さを設定することです。
let textView = UITextView()
let containerView = UIView()
textView.translatesAutoresizingMaskIntoConstraints = false
containerView.addSubview(textView)
textView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true
textView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
textView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true
textView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
textView.heightAnchor.constraint(equalToConstant: 100).isActive = true
let stackView = UIStackView(arrangedSubviews: [containerView])