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 显示的内容:
这是实际操作:
是否可以定义一个变量,并为该变量设置一个约束常量值?
从而可以仅通过更改变量来更改许多约束。我想我看到有人直接从界面生成器中这样做了?
编辑:
每个标签之间有一个约束。我需要一种方法来更改所有这些约束,以便它们获得相同的值。这可能吗?
如果我使用插座集合,我将不得不遍历所有约束,并更改每个约束的值。我正在寻找这样的方法:
// 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 显示的内容:
这是实际操作: