如何在代码中编辑约束
我有一个宽度约束为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。
- 获取对原始约束的引用,并将
constant
部分更改为200 - 获取对原始约束的引用,并将其从视图中删除,并添加新的约束
我会去第一个选项。 要获取引用,请将约束的@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