SnapKit是Masonry的Swift版,项目发布至今大约1年的时间,已经在github上有两千多个star
使用:
注意: UI控件的创建不在此赘述,但是尤其要注意的是,一定要把要进行自动布局的控件先添加到父视图上!一定要先添加!
常用控件:
1.首先先来看一个控件简单使用:
对于一般控件来说:有 上 下 左 右 宽 高 六个属性 必须设置四个属性约束,保证系统能通过其确定位置,否则可能不显示,也可以多设置,通过优先级来判断先支持哪个约束
myTableView.snp_makeConstraints { (make) -> Void in
make.top.equalTo(self.view).offset(10)
make.left.equalTo(self.view).offset(20)
make.bottom.equalTo(self.view).offset(-100)
make.right.equalTo(self.view).offset(-200)
}
一句句分析
self.view 表示myTableView这个控件所在的父视图,当然也可以是其他兄弟视图这个以后再说
make.top.equalTo(self.view).offset(10) 这句代码表示 顶部坐标偏移10个像素点
这句话也可以写成 make.top.equalTo(10)
make.right.equalTo(self.view).offset(-200) 代码意思相,但注意bottom/right 这两个属性和top/left属性不同,后面的偏移量写成负值 才可以偏移200个像素的距离,如果是正值,那么是向右偏移的,就会跑出屏幕
上述四句:可以用
make.edges.equalTo(self.view).inset(UIEdgeInsetsMake(10, 20, 100, 200))
代替, 这个时候 四个值都是正的
另外:还有其他属性
make.size //设置大小
make.center //设置中心点
make.topMargin //设置边距
make.baseline //设置基线位置
make.leading//相当于left
make.trailing//相当于right
make.width
make.height
2.接下来来看相对使用
redView = UIView()
redView.backgroundColor = UIColor.redColor()
myScrollView.addSubview(redView)
redView.snp_makeConstraints { (make) -> Void in
make.size.equalTo(CGSizeMake(UIScreen.mainScreen().bounds.width, 200))
make.left.equalTo(0)
make.top.equalTo
第二个控件可以这么来
yellowView = UIView()
yellowView.backgroundColor = UIColor.yellowColor()
myScrollView.addSubview(yellowView)
yellowView.snp_makeConstraints { (make) -> Void in
make.size.equalTo(CGSizeMake(UIScreen.mainScreen().bounds.width, 200))
make.left.equalTo(redView.snp_right)
make.top.equalTo(0)
}
其中 最主要的一句就是make.left.equalTo(redView.snp_right)
这一句的含义即为 设置黄色视图的左坐标,这个坐标在红色视图的右边
同样,不仅有snp_right,还有snp_bottom,snp_centerX 等属性
注意:设置黄色视图的时候,必须保证红色视图也要添加到父视图上!否则系统找不到红色视图会出错
3.大于/小于
// width >= 200 && width <= 400
make.width.greaterThanOrEqualTo(200)
make.width.lessThanOrEqualTo(400)
4.优先级:
make.top.equalTo(0).priorityLow()
提供:
priorityRequired()
priorityHigh()
priorityMedium()
priorityLow()
四个优先级
另外可以通过priority来设定数字来设定优先级 范围在0 - 1000之间 1000表示必须支持
5.改变:
可以在redView.snp_updateConstraints 或者snp_remakeConstraints 进行修改约束
可以通过snp_removeConstraints 来删除约束
6.其他 :
AutoLayout 中修改bounds 或者transform进行平移缩放是有效的 但是若我们对redView进行修改,黄色视图的位置或者大小不会改变
特殊控件 UILabel
label.snp_makeConstraints { (make) -> Void in
make.top.equalTo(self.contentView).offset(5)
make.right.equalTo(self.contentView).offset(-5)
}
UILabel 可以只设置其坐标点,不设置其高度和宽度
其宽度为文字宽度,高度为文字自适应高度
但是 若不设置宽度||(水平起始&&终止坐标) 即使设置了numberOfLines = 0 也将不能换行