SnapKit 是约束库,即Masonry的swift版本
约束布局原理:
1974698-98e6cb55d8b7702c.png
-
直接设置具体的值 代码如下
testView.snp.makeConstraints { (make) in
make.width.height.equalTo(100) // 链式语法直接定义宽高
make.center.equalToSuperview() // 直接在父视图居中
// make.center.equalTo(view) 等于父视图中心点
}
-
与父视图有20边距
testView.snp.makeConstraints { (make) in
make.edges.equalToSuperview().inset(UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20))
}
//或者下面的方式,只设置部分边距
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)
// 设置宽、高
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)
// 设置宽、高
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)
-
设置视图的大小(width,height),他们效果是一样的
make.width.height.equalTo(100) 或 make.width.equalTo(100) make.height.equalTo(100) 或 make.size.equalTo(CGSize(width: 100, height: 100))
-
设置约束优先级 priority
priority的最大值为1000 大于1000将crash
testView.snp.makeConstraints { (make) in
//999的优先级高于666
make.width.equalTo(100).priority(666)
make.width.equalTo(250).priority(999)
make.height.equalTo(111)
make.center.equalToSuperview()
}
-
更新约束 在控制器updateViewConstraints 或者在事件处理中进行更新
override func updateViewConstraints() { blackView.snp.updateConstraints { (make) in // 更新距离父视图顶部的约束(从 10 ---> 300 ) make.top.equalTo(300) } // 根据苹果,调用父类应该放在末尾 super.updateViewConstraints() }
-
重做约束 remakeConstraints
重做约束的本质就是:去掉已有的所有约束, 重新做约束,记住,是做约束, 也就是说, 使用了
remakeConstraints
后,重做的约束必须要能确定相应视图的大小和位置, 之前makeConstraints
的约束已经不会存在了,完全销毁!!! -
设置大小比例 是另外一个视图的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) }
网友评论