4

-(void)viewWillLayoutSubviewsビューのフレームを更新する必要がある場合は、次のようにコードを挿入できます。

- (void)viewWillLayoutSubviews {
    self.demoView.frame = CGRectMake(0, 0, 10, 10);
}

またはビューのメソッドで- (void)layoutSubviews

ただし、現在 autolayout を使用NSLayoutConstraintしていて、コード内でオブジェクトを動的に更新する必要がある場合、次のようなコードをどこに配置すればよいかわかりませんself.demoWidthConstraint = 10

4

3 に答える 3

9

layoutIfNeeded後で呼び出すだけで、既存の制約をどこでも調整できます。

変更をアニメーション化するには、たとえば次のようにします。

self.demoConstraint.constant = 10;
[UIView animateWithDuration:duration animations:^(void) {
    [self.view layoutIfNeeded];
}];
于 2013-10-16T08:43:39.030 に答える
2

制約への参照を保持する必要があります。これを行う最も簡単な方法は、Xcode で IBOutlet プロパティを作成し、それをインターフェイス ビルダーの制約にリンクすることです。

コードで制約を作成して適用すると、より多くのコードを記述できますが、より柔軟になります。特に、追加および削除されるビューでは。

その場合、単純なプロパティが機能します。ビューの viewDidMoveToSuperview メソッドのいくつかのボイラープレート コードが役立ちます。スーパービューがnilかどうかを確認してください。nil でない場合は、制約プロパティが nil かどうかを確認します。nil の場合、作成します。次に、それをスーパービューに追加します。

必要に応じて、プロパティの constraint プロパティによって制約を調整します。

ビューがスーパービューから削除されたときのボイラープレート コードの場合は、もう 1 つ。最初に制約を削除してから、nil に設定します。

これで、ビューが使用されているときに制約が常に存在し、必要に応じて定数または乗数を調整できます。

于 2013-10-16T09:26:43.643 に答える
0

ビュー コントローラのほとんどの場所で、制約を置き換えたり、その定数を動的に変更したりできます。たとえば、アクション メソッド内で制約の定数を変更できます。変更はアニメーション化することもできます。

于 2013-10-16T05:32:00.507 に答える