IB 没有很好地处理这个问题。笨拙的解决方案是添加“间隔”视图(我们将添加的视图是为了在自动布局中留出间距,但它们是不可见的)。只需使间隔视图宽度相等,然后将这五个视图放在堆栈视图中,或者只是设置水平约束,使五个视图相互邻接:
然后,只需将间隔视图背景设置为清除颜色,这样我们就看不到它们,并且您将获得所需的间距:
如果以编程方式执行此操作(我知道您没有这样做,只是为了完整起见),您将使用 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 添加布局指南。