swift学习记录

使用SnapKit等分布局

2017-02-12  本文已影响0人  Doublingli

有时候会遇到想要把若干个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()
      })
    }
  }
}
上一篇 下一篇

猜你喜欢

热点阅读