2

2 つのビュー (greenView、redView) とスイッチを持つビュー コントローラーがあります。

ここに画像の説明を入力

greenView から 50px の redView 上部スペースに制約があります。redView のすべての制約は次のとおりです。

ここに画像の説明を入力

タップすると greenView の高さを 50px から 100px に切り替えるスイッチがあります。

アプリを起動すると、ビューは思い通りにレイアウトされますが、スイッチをタップすると、greenView フレームの高さが 50 から 100 に変わり、redView が期待どおりに動作しません。 y を 50px 下に配置して、割り当てられた上部スペースの制約を維持します。競合がないように、redView の下部スペースに不等式制約を設定しており、[self.redView layoutIfNeeded].

関連するコードは次のとおりです。

- (IBAction)switchTapped {

if (theSwitch.isOn) {

    greenView.frame = CGRectMake(0, 30, 320, 100);
    [redView layoutIfNeeded];

} else {

    greenView.frame = CGRectMake(0, 30, 320, 50);
    [redView layoutIfNeeded];
}

redView の y 位置が更新されないのはなぜですか?

WWDC のビデオを見たことがありますが、layoutIfNeeded の呼び出しについて言及しているようです。私は何が欠けていますか?

起動時はこんな感じ。

ここに画像の説明を入力

そして、これはスイッチがタップされたときです:

ここに画像の説明を入力

4

2 に答える 2

1

問題を引き起こしていることがいくつかあります。まず、自動レイアウトはオブジェクトのフレームを無視するはずです。何かの高さを変更したい場合は、フレームの高さではなく、高さの制約を変更します。これは、レイアウトの後に制約が適用され、フレームの変更が上書きされるためです。さらに、赤いビューは、「greenView」ではなくスーパービュー「ビュー」に制限されているように見えます。制約を編集する限り、オブジェクトのプロパティを設定してIBOutletから変更できます。constantUILayoutConstraint

于 2013-07-18T16:36:06.983 に答える