2012-10-09 14 views
16

私は(「secondview」は、明らかにするUIViewの名前です)のviewDidLoad内に次のコードを使用してのUIViewを作成しました:プログラムで作成されたUIViewに制約をプログラムで追加する方法はありますか?

secondview = [[UIView alloc] initWithFrame:self.view.frame]; 
    [secondview setBackgroundColor: [UIColor yellowColor]]; 
    secondview.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.view addSubview:secondview]; 

その後viewDidAppear以内に、私は、このビューに制約を追加しました:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:secondview attribute:NSLayoutAttributeRight 
    relatedBy:NSLayoutRelationEqual 
    toItem:self.view 
    attribute:NSLayoutAttributeRight 
    multiplier:1.0f constant:-20.0f]; 
[self.view addConstraint:constraint]; 

しかし、制約はビューには適用されません(少なくとも見ることはできません)。代わりに、画面は画面から消えていくようです。ただし、制約コードがコメントアウトされている場合、ビューには適切なフレームが再度ロードされます(制約は適用されません)。 ButtonやImageViewに同じ制約を適用すると、制約が完全に適用されます。これは、ビューを作成する際にinitWithFrameが原因で問題が発生したと考えるようになりました。ボタンもImageViewも実際にサイズを指定する必要がないためです。

あなたの考えは?どうすれば違うのですか?

答えて

12

この問題を抱えている人には、複数の制約を追加する必要がありました。それがトリックでした。

+1

はい、これも私を助けました。少なくとも2つの制約が必要であるか、ビューが表示されないようです。 – JasonD

+1

あいまいさを除去するのに必要な分だけ必要です。これは2つにすることもできますが、時にはそれ以上にすることもできます。 (ラベルは、例えば最小2文字必要ですが、テキストからサイズを推測できますが、XとYを付ける必要があります) – LightningStryk

関連する問題