如何在代码中编辑约束

oop*_*psi 11 cocoa-touch constraints ios

我有一个宽度约束为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];
Run Code Online (Sandbox Code Playgroud)

但这引发了这个例外:"无法同时满足约束条件."

有任何想法吗?

Mat*_*uch 26

你有两个选择.

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

我会选择第一个选项.要获取引用@property,请为viewController 添加约束,并在创建时指定它.

如果要在xib或storyboard中创建约束,请将约束与IBOutlet连接连接到代码,类似于连接UILabel时的操作.

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


你也可以在这些方面更多地约束你:

NSLayoutConstraint *constraint = [NSLayoutConstraint
                                 constraintWithItem:self.webPage
                                 attribute:NSLayoutAttributeWidth
                                 relatedBy:NSLayoutRelationEqual
                                 toItem:nil
                                 attribute:NSLayoutAttributeNotAnAttribute
                                 multiplier:1
                                 constant:100];
Run Code Online (Sandbox Code Playgroud)

  • 将约束连接到IBOutlet.类似于你在连接UILabel或其他东西时这样做. (4认同)
  • @oopsi,如果要对其进行动画处理,请在animateWithDuration:animations:的动画块内更改常量的值,并调用[superview layoutIfNeeded],其中"superview"是添加约束的任何视图. (2认同)

Boo*_*ger 9

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

_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];
Run Code Online (Sandbox Code Playgroud)

如果您想稍后更改它:

_myConstrain.constant = 200.0f; 
[self.view layoutIfNeeded]; // you may be able to call this on self.webPage
Run Code Online (Sandbox Code Playgroud)