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も実際にサイズを指定する必要がないためです。
あなたの考えは?どうすれば違うのですか?
はい、これも私を助けました。少なくとも2つの制約が必要であるか、ビューが表示されないようです。 – JasonD
あいまいさを除去するのに必要な分だけ必要です。これは2つにすることもできますが、時にはそれ以上にすることもできます。 (ラベルは、例えば最小2文字必要ですが、テキストからサイズを推測できますが、XとYを付ける必要があります) – LightningStryk