如何在autolayout中使用约束标识符以及如何使用标识符更改约束?[迅速]

O-m*_*kar 5 ios autolayout swift xcode7

当我在Xcode 7中编辑我的约束时,我在Interface Builder中找到了标识符字段.约束的标识符是什么?如何使用它?使用标识符可以以编程方式访问约束并更改常量吗?我的问题是为什么以及该标识符如何有用?

快照

有没有办法通过在子视图中循环并再次循环约束子视图的标识符来访问约束.我的意思是有没有办法我们可以直接访问约束而无需循环.

UPDATE

我尝试了这段代码,但只访问了宽度和高度约束

    for subview in view.subviews {
        for constraint in subview.constraints() {
           if constraint.identifier == "identifier" {
                return constraint
           }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Law*_*413 6

如何:调试时标识符很有用(例如,约束不匹配,其中一个在运行时被破坏;约束标识符显示在日志中,因此您可以看到哪个可能导致问题)

原因:约束标识符使日志更易于阅读,更准确,并且可以节省大量时间.

约束编辑:如果要以编程方式更改约束,则必须将它们声明为出口(如标签或按钮),然后将其从视图中删除(不是对象本身),然后再将它们设置为视图.据我所知,你不能只是以编程方式"编辑"约束.

您的代码仅为您提供宽度和高度,因为您可以访问视图的约束,该约束仅包含对象的宽度和高度.

  • 在将约束声明为插座后,实际上可以修改约束,如下所示:self.myConstraint.constant = 50.0 (5认同)

Rom*_* BM 5

在 Swift 4 中可以:

有了这个扩展:

extension UIView{
    func constraintWith(identifier: String) -> NSLayoutConstraint?{
        return self.constraints.first(where: {$0.identifier == identifier})
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样使用:

 if let myConstraint = myView.constraintWith(identifier: "myConstraintID"){
     myConstraint.constant = 8
 }
Run Code Online (Sandbox Code Playgroud)

Ps:请务必调用constraintWith(identifier: String)添加约束的视图,通常是您要更改的相关视图的 superView,或者如果约束是针对大小(宽度/高度)的,则调用其本身