2

私はここに非常に奇妙に思える単純な(完全な)例を持っていますが、確かに何か小さなものが欠けているだけです...そうですか?以下の簡単なコードのデバッグにご協力いただけますか。このコードは aView を非表示にしますが、aView がある制約に aLabel を配置すると、完全に機能します。なんで?ご意見ありがとうございます。これは私にはおかしいようです。

オースティン

UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 100, 30)];
aView.backgroundColor = [UIColor redColor];
aView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:aView];

UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 100, 30)];
aLabel.backgroundColor = [UIColor redColor];
aLabel.text = @"Label";
aLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:aLabel];

NSLayoutConstraint *myConstraint =[NSLayoutConstraint
                                   constraintWithItem:aView
                                   attribute:NSLayoutAttributeCenterY
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:self.view
                                   attribute:NSLayoutAttributeCenterY
                                   multiplier:1.0
                                   constant:0];

[self.view addConstraint:myConstraint];

myConstraint =[NSLayoutConstraint
               constraintWithItem:aView
               attribute:NSLayoutAttributeCenterX
               relatedBy:NSLayoutRelationEqual
               toItem:self.view
               attribute:NSLayoutAttributeCenterX
               multiplier:1.0
               constant:0];

[self.view addConstraint:myConstraint];
4

3 に答える 3

5

さて、行 aView.translatesAutoresizingMaskIntoConstraints = NO; はビューのサイズをゼロにしています..したがって、次のコード行を追加する必要があります:

NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:aView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:100];
[aView addConstraint:widthConstraint];


NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:aView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:30];
[aView addConstraint:heightConstraint];
于 2013-08-07T05:26:17.237 に答える
4

答えは簡単です。UILabels のような特定のオブジェクトには、含まれるテキストに基づく固有のサイズがありますが、UIView にはありません。したがって、UIView のサイズを設定しなかったため、サイズは 0 です。サイズの制約を追加するか、スーパービュー (または同じビュー階層内の他のビュー) の側面にビューを固定する必要があります。

于 2013-08-07T05:07:31.087 に答える
0

別の方法として、4 つの制約 (左、右、上、下) をすべて設定すると、問題も解決します。次に、幅と高さが調整され、それに応じて UIView が引き伸ばされます。4 つの制約すべてを設定する必要があることに注意してください。

于 2016-08-25T11:59:19.953 に答える