web-dev-qa-db-ja.com

UIStackView内のUITextview

UIStackView内にUITextViewを追加しました。

しかし、私のテキストビューはマルチラインではありません。

自動レイアウトは次のように表示されます。

enter image description here

画像によると、1行だけです。画像のようにフレーム外として表示されるテキストビューフレーム。

UITextView

enter image description hereenter image description here

UIStackView

enter image description here

10
user2526811

問題は、topおよびbottomの制約を与えることにより、IStackviewheightを修正したことです。

  1. bottom制約を削除します

    enter image description here

テキストビューのスクロールを無効にします。

textviewを自分自身に委任し、実装しますtextViewDidChange

スイフト

func textViewDidChange(_ textView: UITextView) {
    view.layoutIfNeeded()
}

Objective C:

-(void)textViewDidChange:(UITextView *)textView {
    [self.view layoutIfNeeded];
}

このメソッドが呼び出されることを確認してください。

これで、スタックビューはテキストビューとともに複数行に拡大するはずです。

次に、テキストビューが複数行ではない理由は、高さを固定しているためです。したがって、複数行になることはありません。

GIFを参照してください:

enter image description here

23
Irfan

スタックビューが十分に制約されている限り、isScrollEnabledfalseUITextViewに設定すると、スタックビュー内でサイズを変更できます。

4
Clay Ellis

これまでに私が見つけた最善の解決策は、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])
0
Bueno