0

どこでも AutoLayout を使い始めようとしています。フレームを使用した非常に単純なシナリオがありますが、Autolayout を使用して機能させることはできません。

ライブラリに属しているため、触れられない StoryBoard があります。ストーリーボードに関連する ViewController が読み込まれると、プログラムで View を追加したいと考えています。そこで、 で を作成し、UIViewviewDidLoadさと幅の制​​約と、それらを配置するための他の 2 つの制約を追加しました。すべてがうまくいきましたが、幅は他のビューと同じ幅にしたいです。どうすればいいですか?

「他のビュー」のサイズを に記録しましたがviewDidLoad、サイズが正しくありません。 も記録しましたがself.view.frame.size.width、どちらも正しくありません。

まで正しいサイズが設定されていないことを読んだviewDidLayoutSubviewsので、そこにコードを追加しようとしましたがviewDidLayoutSubviews、決して終わらない呼び出しのループに入ります。私は何を間違っていますか?

4

3 に答える 3

1

2 つのビューを同じ幅にしたい場合は、 を使用してください constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:。これは、viewDidLoad で行うことができます。

NSLayoutConstraint *widthCon = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeWidth multiplier:1 constant:0];

これは、ライブラリ ストーリーボードからのビューが制約を使用して作成されたことを前提としています。

于 2015-05-12T21:17:47.647 に答える
1

にコードを入れてみてくださいviewDidAppear。サブビューが既にビューの子孫であるかどうかを確認し、そうでない場合は、サブビューを制約付きで追加します。

于 2015-05-12T20:20:03.303 に答える
0

UIViewController のこのメソッドを確実に使用できます。

- (void)updateViewConstraints 
{
   [super updateViewConstraints] ;

   // now update your subviews contraints or log your view sizes

}

制約ベースのレイアウトを使用していて、UIViewController の制約に応じてサブビューの制約を更新したい場合は、常に次の方法を使用する必要があります。

于 2015-05-12T20:26:29.850 に答える