如何在代码中编辑约束

我有一个宽度约束为100的网页。

当用户点击一个button时,我想将约束更改为:200。

我试过这个:

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

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

有任何想法吗?

你有两个select。

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

我会去第一个选项。 要获取引用,请将约束的@property添加到viewController中,并在创build它时进行分配。

如果在xib或storyboard中创build约束,则将约束与IBOutlet连接连接到代码,与连接UILabel时执行的操作类似。

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


另外你的约束可能应该更多的沿着这些线:

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

如果你想设置的宽度没有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