在Swift中枚举视图的NSLayoutConstraints?

时间:2014-07-30 19:56:05

标签: ios swift nslayoutconstraint

   [self.view.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
        if ((constraint.firstItem == view) && (constraint.firstAttribute == NSLayoutAttributeTop)) {
            constraint.constant = -200;
        }
    }];

在Objective-C中,我可以枚举一个视图的约束并相应地调整约束,但是在Swift中我很难找到相应的。

这是我尝试在swift中应用代码:

   for (index, value) in enumerate(view.constraints()) {
        var constraint = value as NSLayoutConstraint
        if value.firstItem? = view  {
            constraint.constant = -200;
        }

    }

我收到一个编译错误,声明"键入' [AnyObject!'不符合协议'序列'在此代码的第一行。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

由于constraints()返回[AnyObject]!这是可选的,因此您需要在使用前解包view.constraints()!。因此请解包使用以下代码

    for (index, value) in enumerate(view.constraints()!) {
        var constraint = value as NSLayoutConstraint
        if value.firstItem? = view  {
            constraint.constant = -200;
        }

    }

另外你不能指定firstItem,因为它只是readonly属性。我想你要比较它。所以使用if value.firstItem! as UIView == self.view。所以使用`

 for (index, value) in enumerate(view.constraints()!) {
        var constraint = value as NSLayoutConstraint
        if value.firstItem! as UIView == self.view {
            constraint.constant = -200;
        }

    }