在constraintWithItem中更改乘数时无法满足约束

时间:2012-10-30 11:54:10

标签: iphone ios cocoa-touch constraints containers

我正在努力让我的容器视图正常工作。问题是当乘数变为不同于0.5的东西时我得到:

  

无法同时满足约束条件。

例如,如果我将* c2 multipier更改为0.4而* c8更改为0.6,则会出现上述错误。但如果我改回0.5,那一切都很好。我在这做错了什么? 我得到了一些限制,但它们用于垂直布局,所以我不认为它们是问题。

 NSLayoutConstraint *c1 = [NSLayoutConstraint constraintWithItem: contentView
                                                      attribute: NSLayoutAttributeLeft
                                                      relatedBy: NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeLeft
                                                     multiplier:1.0
                                                       constant:0.0];


NSLayoutConstraint *c2 = [NSLayoutConstraint constraintWithItem: contentView
                                                      attribute: NSLayoutAttributeWidth
                                                      relatedBy: NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeWidth
                                                     multiplier:.4
                                                       constant:0.0];


// detailView

NSLayoutConstraint *c7 = [NSLayoutConstraint constraintWithItem: detailView
                                                      attribute: NSLayoutAttributeRight
                                                      relatedBy: NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeRight
                                                     multiplier:1.0
                                                       constant:0.0];


NSLayoutConstraint *c8 = [NSLayoutConstraint constraintWithItem: detailView
                                                      attribute: NSLayoutAttributeWidth
                                                      relatedBy: NSLayoutRelationEqual
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeWidth
                                                     multiplier:.6
                                                       constant:0.0];

2 个答案:

答案 0 :(得分:2)

我使用relatedBy成功了:NSLayoutRelationGreaterThanOrEqual。

例如:

        [self.view addConstraint:

             [

              NSLayoutConstraint

              constraintWithItem: _accountRegisteredDateLabel
              attribute:NSLayoutAttributeWidth
              relatedBy:NSLayoutRelationGreaterThanOrEqual
              toItem:self.view
              attribute:NSLayoutAttributeWidth
              multiplier:.30
              constant:0


              ]

         ];

答案 1 :(得分:0)

我以为我会回答我自己的问题。 我最终将一个视图乘数设置为0.609375,另一个设置为0.390625 这对我很有用!

为什么它以0.4和0.6失败是因为它没有与总空间相加。 我的两个视图将彼此相邻,总空间为1024px(ipad)。

0.4 * 1024 = 409,6

0.6 * 1024 = 614,4

我的理解是,不管怎样,constraintWithItem方法都不关心余数并抛出错误。

所以只想出一个不会给你任何剩余的数字

0.390625 * 1024 = 400

0.609375 * 1024 = 624