简单使用
let box = UIView()
superview.addSubview(box)
box.snp.makeConstraints { (make) -> Void in
make.top.equalTo(superview).offset(20)
make.left.equalTo(superview).offset(20)
make.bottom.equalTo(superview).offset(-20)
make.right.equalTo(superview).offset(-20)
}
复制代码
内边距化简写
let box = UIView()
superview.addSubview(box)
box.snp.makeConstraints { (make) -> Void in
make.edges.equalTo(superview).inset(UIEdgeInsetsMake(20, 20, 20, 20))
}
复制代码
支持NSLayoutRelation.Equal
=》.equalTo
,NSLayoutRelation.LessThanOrEqual
=》.lessThanOrEqualTo
和NSLayoutRelation.GreaterThanOrEqual
=》.greaterThanOrEqualTo
属性对照表
make.centerX.lessThanOrEqualTo(view2.snp.left)
// these two constraints are exactly the same
make.left.greaterThanOrEqualTo(label)
make.left.greaterThanOrEqualTo(label.snp.left)
复制代码
设置范围
// width >= 200 && width <= 400
make.width.greaterThanOrEqualTo(200)
make.width.lessThanOrEqualTo(400)
复制代码
// creates view.left <= view.superview.left + 10
make.left.lessThanOrEqualTo(10)
复制代码
其它
make.top.equalTo(42)
make.height.equalTo(20)
make.size.equalTo(CGSize(width: 50, height: 100))
make.edges.equalTo(UIEdgeInsets(top: 10, left: 0, bottom: 10, right: 0))
make.left.equalTo(view).offset(UIEdgeInsets(top: 10, left: 0, bottom: 10, right: 0))
复制代码
- 优先级
//数字优先级
make.top.equalTo(label.snp.top).priority(600)
//.low, .medium, .high, .required
make.top.equalTo(label.snp.top).priority(.medium)
复制代码
- 简写再简写
edges
// make top, left, bottom, right equal view2
make.edges.equalTo(view2);
// make top = superview.top + 5, left = superview.left + 10,
// bottom = superview.bottom - 15, right = superview.right - 20
make.edges.equalTo(superview).inset(UIEdgeInsets(top: 5, left: 10, bottom: 15, right: 20))
复制代码
size
// make width and height greater than or equal to titleLabel
make.size.greaterThanOrEqualTo(titleLabel)
// make width = superview.width + 100, height = superview.height + 100
make.size.equalTo(superview).offset(100)
复制代码
center
// make centerX and centerY = button1
make.center.equalTo(button1)
// make centerX = superview.centerX + 5, centerY = superview.centerY + 5
make.center.equalTo(superview).offset(5)
复制代码
// All edges but the top should equal those of the superview
make.left.right.bottom.equalTo(superview)
make.top.equalTo(otherView)
复制代码
- 持有约束并对其进行更新和重做等操作
var topConstraint: Constraint? = nil
...
// when making constraints
view1.snp.makeConstraints { (make) -> Void in
self.topConstraint = make.top.equalTo(superview).offset(padding.top).constraint
make.left.equalTo(superview).offset(padding.left)
}
...
// then later you can call
self.topConstraint.uninstall()
// or if you want to update the constraint
self.topConstraint.updateOffset(5)
复制代码
更新约束.updateConstraints
// this is Apple's recommended place for adding/updating constraints
// this method can get called multiple times in response to setNeedsUpdateConstraints
// which can be called by UIKit internally or in your code if you need to trigger an update to your constraints
override func updateConstraints() {
self.growingButton.snp.updateConstraints { (make) -> Void in
make.center.equalTo(self);
make.width.equalTo(self.buttonSize.width).priority(250)
make.height.equalTo(self.buttonSize.height).priority(250)
make.width.lessThanOrEqualTo(self)
make.height.lessThanOrEqualTo(self)
}
// according to Apple super should be called at end of method
super.updateConstraints()
}
复制代码
重做约束.remakeConstraints
func changeButtonPosition() {
self.button.snp.remakeConstraints { (make) -> Void in
make.size.equalTo(self.buttonSize)
if topLeft {
make.top.left.equalTo(10)
} else {
make.bottom.equalTo(self.view).offset(-10)
make.right.equalTo(self.view).offset(-10)
}
}
}
复制代码
- topLayoutGuide and bottomLayoutGuide
//topLayoutGuide.snp.bottom is similar to topLayoutGuide.bottomAnchor and you can also use bottomLayoutGuide.snp.top to align view on top of UITabBar.
import SnapKit
class MyViewController: UIVewController {
lazy var tableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(tableView)
tableView.snp.makeConstraints { (make) -> Void in
make.top.equalTo(self.topLayoutGuide.snp.bottom)
make.left.equalTo(view)
make.right.equalTo(view)
make.bottom.equalTo(self.bottomLayoutGuide.snp.top)
}
}
}
复制代码
Snap view to safe layout guide
Just like topLayoutGuide
and bottomLayoutGuide
using iPhone X’s new safeAreaLayoutGuide
is easy:
import SnapKit
class MyViewController: UIVewController {
lazy var tableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(tableView)
tableView.snp.makeConstraints { (make) -> Void in
make.top.equalTo(self.safeAreaLayoutGuide.snp.top)
}
}
}
复制代码