是否可以定义变量,并为该变量设置约束常量值?
从而可以通过仅改变变量来改变许多约束。我想我看到有人直接从界面建设者那里做到这一点?
修改
每个标签之间存在约束。我需要一种方法来改变所有这些约束,因此它们获得相同的值。这可能吗?
如果我使用插座集合,我将不得不遍历所有约束,并更改每个限制的值。我正在寻找这样的方法:
// SEUDO!!
lineSeperationWidth = 31 // changes all 4 constraints.
答案 0 :(得分:3)
NSLayoutContraint
是所有单独的对象,Xcode无法使用相同的变量设置多个约束的constant
值。最接近的是使用@IBOutlet
集合,然后使用didSet
属性观察器为包含公共空间值的变量更新集合中的每个约束
这是我创建的一个示例,它根据每次按下space
按钮时设置为Go
属性的随机值来区分标签:
class ViewController: UIViewController {
@IBOutlet var spacers: [NSLayoutConstraint]!
var space: CGFloat = 20.0 {
didSet {
spacers.forEach { $0.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
}
}
标签之间的每个垂直空间限制都与@IBOutlet
集合spacers
相关联。以下是 Connections Inspector 显示的内容:
这是在行动:
答案 1 :(得分:0)
是的!您可以使用文档大纲视图查找要用作变量的约束。一旦你拥有它,CTRL +从文档大纲视图中的约束拖动到你的代码来制作插座。然后,您可以使用self.constraint.constant = 31
更改代码中的约束。
要平均分隔所有视图,您可以将UILayoutGuides
放在每个标签之间,并将所有高度限制为相等。然后你可以改变其中一个布局指南的高度,它们都会改变以匹配它。