1

AutoLayout機能を使用しています。すべてが適切に機能しますが、プログラムでコントロールのサイズを変更すると、他のサブビューまたはコントロールがそれに応じて配置されません。プログラムでコントロールのサイズを変更した後、制約を更新するにはどうすればよいですか。

また

コードでコントロールのサイズを変更した後、AutoLayout は機能しますか?

編集:

ここでは、文字列に基づいてテキスト ビューのサイズを変更していますが、下のサブビューと重なっています。

 - (void)textViewDidChange:(UITextView *)textView
    {
    if (textView == pupose_txt_view) {
        CGSize maximumLabelSize = CGSizeMake(self.topic_text_view.frame.size.width,
                                             FLT_MAX);

        UILabel *label = [[UILabel alloc] initWithFrame:pupose_txt_view.frame];
        CGSize expectedLabelSize = [pupose_txt_view.text sizeWithFont:pupose_txt_view.font
                                      constrainedToSize:maximumLabelSize
                                          lineBreakMode:label.lineBreakMode];


        CGRect newFrame = pupose_txt_view.frame;
        newFrame.size.height = expectedLabelSize.height;
        pupose_txt_view.frame = newFrame;
    }
}
4

1 に答える 1

1

setFrame:自動レイアウトを使用している場合、ビューの位置またはサイズを更新するために使用することはできません。代わりに、レイアウト システムがすべてのビューの位置を更新できるように、制約を更新して新しいサイズを設定する必要があります。

これを行うには、テキスト サイズの高さ制限のアウトレットを作成し、高さconstantを変更するたびにそのプロパティを設定します。テキスト ビューの制約を削除して新しい制約を作成することもできますが、必要なコードが少なくなり、実行時の効率が向上するため、定数を更新することをお勧めします。

于 2013-07-05T12:50:33.587 に答える