我有两个宽度约束相等的按钮。我想删除等宽约束并为一个按钮添加新的宽度约束。另一个按钮约束为零。
答案 0 :(得分:1)
您不需要这样做,
self.yourButtonWidthConstraint.constant = yourWidth;
答案 1 :(得分:1)
如果您在NSLayoutConstraint
中查看the documentation,则会发现isActive
属性:
您可以通过更改此属性来激活或停用约束。请注意,只有活动约束会影响所计算的布局。
激活或停用约束将在此约束所管理项目的最接近公共祖先的视图上调用addConstraint:和removeConstraint:。使用此属性,而不是直接调用addConstraint:或removeConstraint:。
接下来,我将更改示例代码中的removeConstraint
和addConstraint
。
也就是将您的代码更改为此:
NSLayoutConstraint * constraint = [self
constraintWithIndientifer:@"MyButtonWidth" InView:self.view];
constraint.active = NO; // CHANGE 1
NSLayoutConstraint * newconstraint = [NSLayoutConstraint constraintWithItem:self.departureButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1 constant:self.view.frame.size.width];
newconstraint.identifier = @"MyButtonWidth";
newConstraint.active = YES; // CHANGE 2
[self.view layoutIfNeeded];
注意:NSLayoutConstraint
类还具有两个类函数:+ activateConstraints:
和+ deactivateConstraints:
,它们都具有一系列约束。当您更改多个约束时,这是首选方法,但是这里不需要,因为它只有1。
答案 2 :(得分:0)
循环通过这两个按钮的父视图的约束并删除约束,其中第一个项目是第一个按钮,第二个是第二个按钮,layoutAttribute是宽度
<intent-filter>
然后添加新的宽度约束,不要忘记调用
for (NSLayoutConstraint*co in self.parentOfBtns.constraints)
{
if(co.firstItem==self.btn1&&co.secondItem==self.btn2&&co.firstAttribute==NSLayoutAttributeWidth&co.secondAttribute==NSLayoutAttributeWidth)
[self.parentOfBtns removeConstraint:co];
}
答案 3 :(得分:0)
NSLayoutConstraint * constraint = [self
constraintWithIndientifer:@"MyButtonWidth" InView:self.view];
[self.view removeConstraint:constraint];
NSLayoutConstraint * newconstraint = [NSLayoutConstraint constraintWithItem:self.departureButton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1 constant:self.view.frame.size.width];
newconstraint.identifier = @"MyButtonWidth";
[self.departureButton addConstraint:newconstraint];
[self.view layoutIfNeeded];
-(NSLayoutConstraint *)constraintWithIndientifer:(NSString *)identifer InView:(UIView *)view{
NSLayoutConstraint * constraintToFind = nil;
for (NSLayoutConstraint * constraint in view.constraints ) {
if([constraint.identifier isEqualToString:identifer]){
constraintToFind = constraint;
break;
}
}
return constraintToFind;
}
这就是我所做的。但它不起作用。等宽度约束不会删除