有时候会遇到想要把若干个button(Button1,...,ButtonN)以相同的宽度排成一排显示在一个view(ViewP)里面,并且使得button的宽度随着view的宽度改变而改变
如下图:
之前用的办法是在父View改变的时候重新布局
现在使用SnapKit添加约束 自动布局
var buttonTitles = ["服务", "作品", "图库云"]
var alignLeftItem = self.snp.left
var firstButton:UIButton!
for i in 0..<buttonTitles.count {
let button = HomeSegmentControlButton(title:buttonTitles[i])
self.addSubview(button)
// 所有button总共只有一个的例外情况
if buttonTitles.count == 1 {
button.snp.makeConstraints({ (b) in
b.height.equalToSuperview()
b.left.right.equalToSuperview()
b.top.equalToSuperview()
})
} else {
// 第一个button左边固定在父容器的左侧,不设置宽度
if i == 0 {
firstButton = button
button.snp.makeConstraints({ (b) in
b.height.equalToSuperview()
b.left.equalTo(alignLeftItem)
b.top.equalToSuperview()
})
alignLeftItem = button.snp.right
// 之后的每一个button(除了最后一个):
// 左边固定在上一个button的右侧
// 宽度设置与第一个button相等
} else if i < buttonTitles.count - 1 {
button.snp.makeConstraints({ (b) in
b.width.equalTo(firstButton)
b.height.equalToSuperview()
b.left.equalTo(alignLeftItem)
b.top.equalToSuperview()
})
alignLeftItem = button.snp.right
// 最后一个button:
// 左边固定在倒数第二个button的右侧
// 右边固定在父容器的右边
// 宽度设置为与第一个button相等
} else {
button.snp.makeConstraints({ (b) in
b.width.equalTo(firstButton)
b.height.equalToSuperview()
b.left.equalTo(alignLeftItem)
b.right.equalTo(self.snp.right)
b.top.equalToSuperview()
})
}
}
}