11

我有一个宽度限制为 100 的网页。

当用户单击按钮时,我想将约束更改为:200。

我试过这个:

NSLayoutConstraint *constrain = [NSLayoutConstraint
                                 constraintWithItem:self.webPage
                                 attribute:NSLayoutAttributeWidth
                                 relatedBy:NSLayoutRelationEqual
                                 toItem:self.webPage
                                 attribute:NSLayoutAttributeWidth
                                 multiplier:1
                                 constant:100];




[self.webPage addConstraint:constrain];

但这抛出了这个异常:“无法同时满足约束。”

有任何想法吗?

4

2 回答 2

27

你有两个选择。

  1. 获取对原始约束的引用并将constant零件更改为 200
  2. 获取对原始约束的引用并将其从视图中删除,并添加新约束

我会选择第一个选项。要获得引用,请将@property约束添加到您的 viewController 并在创建时分配它。

如果您在 xib 或情节提要中创建约束,则将约束与 IBOutlet 连接连接到您的代码,类似于您在连接 UILabel 时所做的事情。

然后,您可以轻松地调整约束的常数部分。


此外,您的约束可能应该更多地遵循以下原则:

NSLayoutConstraint *constraint = [NSLayoutConstraint
                                 constraintWithItem:self.webPage
                                 attribute:NSLayoutAttributeWidth
                                 relatedBy:NSLayoutRelationEqual
                                 toItem:nil
                                 attribute:NSLayoutAttributeNotAnAttribute
                                 multiplier:1
                                 constant:100];
于 2013-09-19T14:30:34.787 回答
9

如果你想设置宽度没有 toItem: 设置。

_myConstrain = [NSLayoutConstraint
                             constraintWithItem:self.webPage
                             attribute:NSLayoutAttributeWidth
                             relatedBy:NSLayoutRelationEqual
                             toItem:nil
                             attribute:NSLayoutAttributeNotAnAttribute
                             multiplier:1
                             constant:100];

// add to superview! not to self.webPage 
[self.view addConstraint:_myConstrain];

当您想稍后更改它时:

_myConstrain.constant = 200.0f; 
[self.view layoutIfNeeded]; // you may be able to call this on self.webPage
于 2013-09-19T14:35:36.860 回答