SnapKit 是約束庫,即Masonry的swift版本
約束布局原理:
-
直接設(shè)置具體的值 代碼如下
testView.snp.makeConstraints { (make) in
make.width.height.equalTo(100) // 鏈?zhǔn)秸Z法直接定義寬高
make.center.equalToSuperview() // 直接在父視圖居中
// make.center.equalTo(view) 等于父視圖中心點(diǎn)
}
-
與父視圖有20邊距
testView.snp.makeConstraints { (make) in
make.edges.equalToSuperview().inset(UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20))
}
//或者下面的方式绑咱,只設(shè)置部分邊距
testView.snp.makeConstraints { (make) in
make.left.right.top.equalToSuperview().inset(UIEdgeInsets(top: 20, left: 20, bottom: 0, right: 20))
make.height.e
}
-
水平線小于等于另一個視圖的左邊
view2.snp.makeConstraints { (make) in
// 讓頂部距離view1的底部為10的距離
make.top.equalTo(view1.snp.bottom).offset(10)
// 設(shè)置寬贤旷、高
make.width.height.equalTo(100)
// 水平中心線<=view1的左邊
make.centerX.lessThanOrEqualTo(view1.snp.leading)
}
讓視圖View2的左邊>=父視圖View1的左邊
view2.snp.makeConstraints { (make) in
// 讓頂部距離view1的底部為10的距離
make.top.equalTo(view1.snp.bottom).offset(10)
// 設(shè)置寬、高
make.width.height.equalTo(100)
// 水平中心線<=view1的左邊
make.left.greaterThanOrEqualTo(view1)
// 或者, 和上面一行代碼一樣的效果
// make.left.greaterThanOrEqualTo(view1.snp.left)
}
一般情況下 >= 或 <= 我們都可以直接用equalTo來代替蚯姆!
-
布局靈活邀桑,下面的效果是一樣的
make.left.equalToSuperview().offset(10)
make.left.equalTo(10)
make.left.equalTo(view1.snp.left).offset(10)
-
設(shè)置視圖的大小(width水援,height),他們效果是一樣的
make.width.height.equalTo(100) 或 make.width.equalTo(100) make.height.equalTo(100) 或 make.size.equalTo(CGSize(width: 100, height: 100))
-
設(shè)置約束優(yōu)先級 priority
priority的最大值為1000 大于1000將crash
testView.snp.makeConstraints { (make) in
//999的優(yōu)先級高于666
make.width.equalTo(100).priority(666)
make.width.equalTo(250).priority(999)
make.height.equalTo(111)
make.center.equalToSuperview()
}
-
更新約束 在控制器updateViewConstraints 或者在事件處理中進(jìn)行更新
override func updateViewConstraints() { blackView.snp.updateConstraints { (make) in // 更新距離父視圖頂部的約束(從 10 ---> 300 ) make.top.equalTo(300) } // 根據(jù)蘋果,調(diào)用父類應(yīng)該放在末尾 super.updateViewConstraints() }
-
重做約束 remakeConstraints
重做約束的本質(zhì)就是:去掉已有的所有約束茅郎, 重新做約束蜗元,記住,是做約束系冗, 也就是說奕扣, 使用了
remakeConstraints
后,重做的約束必須要能確定相應(yīng)視圖的大小和位置, 之前makeConstraints
的約束已經(jīng)不會存在了掌敬,完全銷毀9叨埂3卮拧! -
設(shè)置大小比例 是另外一個視圖的9/16
testView.snp.makeConstraints { make in make.center.equalTo(view1.snp.center) make.width.equalTo(view1.snp.width).multipliedBy(9/16.0) make.height.equalTo(30) }