我希望在视图上对齐很多项目。
此代码适用于1个项目:
let control_constraint_ItemAlign = NSLayoutConstraint(item: emailField, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
但我想尝试这样的代码:
let control_constraint_ItemAlign =
NSLayoutConstraint(item:[emailField,passwordField,loginButton],
attribute: NSLayoutAttribute.CenterX,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.CenterX,
multiplier: 1,
constant: 0)
或唯一的解决方案是为每个项目写一个约束?
答案 0 :(得分:2)
您可以遍历视图:
for view in [emailField,passwordField,loginButton] {
let control_constraint_ItemAlign =
NSLayoutConstraint(item:view,
attribute: NSLayoutAttribute.CenterX,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.CenterX,
multiplier: 1,
constant: 0)
self.view.addConstraint(control_constraint_ItemAlign)
}
或者,您可以将适当的选项传递给可视格式语言
答案 1 :(得分:1)
@Patonz - 我收到了这个答案,因为我看到你对已接受答案的评论,我正在寻找一个涉及for-loop + VFL的解决方案。
如果我没有弄错的话,我认为正确的方法是“让它在中心”,而不是试图强迫它集中。
您可以使用循环枚举视图字典,然后插入密钥:
let views = [
"red": redView,
"blue": blueView,
"yellow": yellowView,
]
self.statsView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|-2-[red(>=10)]-2-[blue(==red)]-2-[yellow(==red)]-2-|", options: nil, metrics: nil, views: views))
for (index, (key, val)) in enumerate(views) {
self.statsView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|-60-[\(key)(>=100)]-60-|", options: nil, metrics: nil, views: views))
}
注意>=
。只需设置最小值并让自动布局完成其工作(为您扩展/填充剩余空间)。但你可以简单地删除它们并达到同样的效果:
self.statsView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|-2-[red]-2-[blue(==red)]-2-[yellow(==red)]-2-|", options: nil, metrics: nil, views: views))
for (index, (key, val)) in enumerate(views) {
self.statsView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|-60-[\(key)]-60-|", options: nil, metrics: nil, views: views))
}
我使用颜色进行视觉理解,你可以像这样制作你的字典:
let views = [
"email": emailField,
"password": passwordField,
"login": loginButton
]
以下是一个完整示例的要点:https://gist.github.com/damionjn/cd6054c6cae770713615