Xcode;将自动布局约束设置为定义的变量值

Xcode; Set a autolayout constraint to a defined variable value

是否可以定义一个变量,并为该变量设置一个约束常量值?

从而可以仅通过更改变量来更改许多约束。我想我看到有人直接从界面生成器中这样做了?

编辑:

每个标签之间有一个约束。我需要一种方法来更改所有这些约束,以便它们获得相同的值。这可能吗?

如果我使用插座集合,我将不得不遍历所有约束,并更改每个约束的值。我正在寻找这样的方法:

// SEUDO!!
lineSeperationWidth = 31    // changes all 4 constraints.

是的!您可以使用文档大纲视图来查找要用作变量的约束。拥有它后,CTRL + 从文档大纲视图中的约束拖动到您的代码以创建出口。然后您可以使用 self.constraint.constant = 31.

更改代码中的约束

为了 space 所有视图均等,您可以将 UILayoutGuides 放在每个标签之间,并将它们的所有高度限制为相等。然后您可以更改其中一个布局指南的高度,它们都会更改以匹配它。

NSLayoutContraint都是单独的对象,Xcode没有办法用同一个变量设置多个约束的constant值。您可以获得的最接近的方法是使用 @IBOutlet 集合,然后使用 didSet 属性 observer 作为您的变量,其中包含共同的 space 值更新集合中的每个约束。

这是我创建的一个示例,其中 space 根据我设置为 space 属性 的随机值输出标签,每次按下 Go 按钮被按下:

class ViewController: UIViewController {

    @IBOutlet var spacers: [NSLayoutConstraint]!

    var space: CGFloat = 20.0 {
        didSet {
            spacers.forEach { [=10=].constant = space }
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func spaceOut(sender: AnyObject) {
        // set space to a random value
        space = CGFloat(arc4random_uniform(30)) + 20.0
    }

}

标签之间的每个垂直 space 约束都连接到 @IBOutlet 集合 spacers。这是 Connections Inspector 显示的内容:


这是实际操作: