iOS Autolayout:两个宽度相等且间隔相等的视图

时间:2016-10-15 17:57:52

标签: ios xcode-storyboard ios-autolayout

我目前在使用AutoLayout时遇到了困难。我正在使用界面构建器并且我正在尝试放置两个100 * 100的uiview块。我需要放置这些块,使得第一个块导致superview等于第二个块跟踪到superview.Further这等于这两个块之间的空间,并根据屏幕宽度同等变化。 我尝试过使用stackview giving fixed width to stackview seems to be equally spaced in 4s but not on 6s。保持宽度不固定会导致块as here之间的间距更大。

是否可以通过界面构建​​器实现此目的? 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

IB没有优雅地处理这个问题。 kludgy解决方案是添加" spacer"视图(我们将为自动布局中的间距添加的视图,但这些视图将不可见)。只需使间隔视图宽度相等,然后将这五个视图放在堆栈视图中,或者只设置水平约束,以便五个视图相互邻接:

enter image description here

然后,只需将间隔视图背景设置为清晰的颜色,这样我们就不会看到它们,并且您将拥有所需的间距:

enter image description here

如果以编程方式执行此操作(我知道您没有这样做,但仅仅是为了完整性),您使用UILayoutGuide而不是这些不可见的间隔视图:

let view1 = ...
let view2 = ...

let layout1 = UILayoutGuide()
view.addLayoutGuide(layout1)
let layout2 = UILayoutGuide()
view.addLayoutGuide(layout2)
let layout3 = UILayoutGuide()
view.addLayoutGuide(layout3)

let views: [String: Any] = ["view1": view1, "view2": view2, "layout1": layout1, "layout2": layout2, "layout3": layout3]

view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[layout1][view1(==100)][layout2(==layout1)][view2(==100)][layout3(==layout1)]|", options: .alignAllCenterX, metrics: nil, views: views))

view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[view1(==100)]", options: [], metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[view2(==100)]", options: [], metrics: nil, views: views))

Apple还没有为IB添加布局指南,这有点令人惊讶。