1. ホーム
  2. ios

[解決済み] オートレイアウトでテキストに展開するUITextView

2022-04-21 07:20:15

質問

私は、プログラムによる自動レイアウトを使用して完全にレイアウトされたビューを持っています。ビューの真ん中にUITextViewがあり、その上下にアイテムがあります。すべてうまくいっていますが、テキストが追加されたときにUITextViewを展開できるようにしたいです。この場合、UITextViewが拡張されると、その下にあるすべてのアイテムが押し下げられるはずです。

スプリングとストラッツの方法は知っていますが、自動レイアウトの方法はありますか?私が思いつく唯一の方法は、制約が大きくなるたびに、制約を削除し、再追加することです。

どのように解決するのですか?

UITextViewを含むビューは、そのサイズを setBounds をAutoLayoutで表示します。というわけで、こんな感じ。スーパービューは、他の制約を全て初期設定し、最後にUITextViewの高さに特別な制約を1つ入れて、インスタンス変数に保存しておきました。

_descriptionHeightConstraint = [NSLayoutConstraint constraintWithItem:_descriptionTextView
                                 attribute:NSLayoutAttributeHeight 
                                 relatedBy:NSLayoutRelationEqual 
                                    toItem:nil 
                                 attribute:NSLayoutAttributeNotAnAttribute 
                                multiplier:0.f 
                                 constant:100];

[self addConstraint:_descriptionHeightConstraint];

setBounds メソッドで、次に定数の値を変更しました。

-(void) setBounds:(CGRect)bounds
{
    [super setBounds:bounds];

    _descriptionTextView.frame = bounds;
    CGSize descriptionSize = _descriptionTextView.contentSize;

    [_descriptionHeightConstraint setConstant:descriptionSize.height];

    [self layoutIfNeeded];
}