繁体   English   中英

如何确定NSLayoutConstraint方向?

[英]How to determine NSLayoutConstraint orientation?

我想在iOS7的运行时修改一些自动布局约束,因为必须删除一个视图,并且其侧面的按钮必须自己放大以填充消失的视图的空白。

为此,我希望删除按钮上附加的所有水平约束,并添加新的约束...不幸的是,即使我找到了UILayoutConstraintAxis类型,也仍然找不到如何知道给定NSLayoutConstraint的方向。 。

垂直约束附加到按钮的超级视图。 可能在视图树上方也存在更多约束,但我们将假定不出于示例目的。

//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以确定约束是否垂直。 您不能在不在同一轴上的两个属性之间创建约束,而不会产生运行时异常,因此您只需检查NSLayoutConstraint一个属性即可确定轴。

- (BOOL)isVerticalConstraint
{
    switch (self.firstAttribute)
    {
        case NSLayoutAttributeBaseline:
        case NSLayoutAttributeCenterY:
        case NSLayoutAttributeTop:
        case NSLayoutAttributeBottom:
        case NSLayoutAttributeHeight:
            return YES;
            break;
        default:
            break;
    }

    return NO;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM