我想在iOS7的运行时修改一些自动布局约束,因为必须删除一个视图,并且其侧面的按钮必须自行放大以填充消失视图的空白。
为此,我希望删除按钮上附加的所有水平约束,并添加新的约束...不幸的是,即使我找到了UILayoutConstraintAxis
类型,也仍然没有找到如何知道给定NSLayoutConstraint
的方向的方法。 。
最佳答案
垂直约束附加到按钮的 super 视图。可能在视图树的上方也存在更多约束,但是我们将假定这不是出于示例目的。
//Assuming your UIButton variable is named 'button'
UIView * superview = [button superview];
NSArray * verticalConstraints = [superview constraintsAffectingLayoutForAxis: UILayoutConstraintAxisVertical];
NSArray * constraintsAffectingButton = @[];
for (NSLayoutConstraint * constraint in verticalConstraints)
{
if (constraint.firstItem == button || constraint.secondItem == button)
{
constraintsAffectingButton = [constraintsAffectingButton arrayByAddingObject:constraint];
}
}
[superview removeConstraints:constraintsAffectingButton]
您还可以在
NSLayoutConstraint
中添加一个category方法,以确定约束是否垂直。如果不生成运行时异常,就无法在不在同一轴上的两个属性之间创建约束,因此您只需检查NSLayoutConstraint
的一个属性即可确定轴。- (BOOL)isVerticalConstraint
{
switch (self.firstAttribute)
{
case NSLayoutAttributeBaseline:
case NSLayoutAttributeCenterY:
case NSLayoutAttributeTop:
case NSLayoutAttributeBottom:
case NSLayoutAttributeHeight:
return YES;
break;
default:
break;
}
return NO;
}
关于ios - 如何确定NSLayoutConstraint方向?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20476119/