2

ラベルの上部が UIViewController の 2/3 になるようにラベルを配置しようとしています。だから私はこの制約を書きましたが、それは私に以下のエラーを与えます.

NSLayoutConstraint *labelTopConstraint = [NSLayoutConstraint constraintWithItem:self.myLabel
                                         attribute:NSLayoutAttributeTop
                                         relatedBy:NSLayoutRelationGreaterThanOrEqual
                                            toItem:self.view
                                         attribute:NSLayoutAttributeHeight
                                        multiplier:0.66
                                          constant:0];

エラー:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** +[NSLayoutConstraint 
constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: 
Invalid pairing of layout attributes'
4

3 に答える 3

7

うん、面倒くさいですよね。ビュー コントローラが画面全体の高さであると仮定すると、高さの代わりに NSLayoutAttributeBottom を使用でき、同じ結果が得られます。

于 2013-04-21T07:11:09.067 に答える
2

この制約を追加できます。

[self.view addConstraints:
   [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=topSpace)-[topLabel]"
                                           options:0
                                           metrics:@{@"topSpace":@(self.view.bounds.size.height*0.66f)}
                                             views:NSDictionaryOfVariableBindings(topLabel)]];

viewDidAppear:それ以前は高さがゼロになるため、これを in または afterで呼び出すことをお勧めします。

于 2013-04-21T10:49:27.530 に答える
0

それは正しく読み取れません - self.myLabel の上部は >= 0.66 * self.view.height? である必要があります。self.myLabel の高さは 1 つで、その上部は別のものです。self.myLabel の下端をスーパービューの下端に固定できる場合は、次のような制約を設定すると思います。

NSLayoutConstraint *labelHeightConstraint = [NSLayoutConstraint constraintWithItem:self.myLabel
                                         attribute:NSLayoutAttributeHeight
                                         relatedBy:NSLayoutRelationGreaterThanOrEqual
                                            toItem:self.view
                                         attribute:NSLayoutAttributeHeight
                                        multiplier:0.66
                                          constant:0];

これにより、self.myLabel の高さが常にルート ビューの高さの少なくとも 2/3 になるようにする必要があります。

于 2013-04-21T21:55:32.583 に答える