我目前在使用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之间的间距更大。
是否可以通过界面构建器实现此目的? 非常感谢任何帮助。
答案 0 :(得分:1)
IB没有优雅地处理这个问题。 kludgy解决方案是添加" spacer"视图(我们将为自动布局中的间距添加的视图,但这些视图将不可见)。只需使间隔视图宽度相等,然后将这五个视图放在堆栈视图中,或者只设置水平约束,以便五个视图相互邻接:
然后,只需将间隔视图背景设置为清晰的颜色,这样我们就不会看到它们,并且您将拥有所需的间距:
如果以编程方式执行此操作(我知道您没有这样做,但仅仅是为了完整性),您使用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添加布局指南,这有点令人惊讶。