SnapKit的使用

2022-05-27  本文已影响0人  NicoalsNC

SnapKit 是约束库,即Masonry的swift版本

约束布局原理:


1974698-98e6cb55d8b7702c.png
  1. 直接设置具体的值 代码如下
testView.snp.makeConstraints { (make) in
        make.width.height.equalTo(100)    // 链式语法直接定义宽高
        make.center.equalToSuperview()    // 直接在父视图居中
       // make.center.equalTo(view) 等于父视图中心点
   }
  1. 与父视图有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
 }
  1. 水平线小于等于另一个视图的左边
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来代替!

  1. 布局灵活,下面的效果是一样的
make.left.equalToSuperview().offset(10)
make.left.equalTo(10)
make.left.equalTo(view1.snp.left).offset(10)
  1. 设置约束优先级 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()
}
  1. 更新约束 在控制器updateViewConstraints 或者在事件处理中进行更新
    override func updateViewConstraints() {
           blackView.snp.updateConstraints { (make) in
               // 更新距离父视图顶部的约束(从 10 ---> 300 )
               make.top.equalTo(300)
           }
           // 根据苹果,调用父类应该放在末尾
           super.updateViewConstraints()
       }
    
  2. 重做约束 remakeConstraints

    重做约束的本质就是:去掉已有的所有约束, 重新做约束,记住,是做约束, 也就是说, 使用了remakeConstraints后,重做的约束必须要能确定相应视图的大小位置, 之前makeConstraints的约束已经不会存在了,完全销毁!!!

  3. 设置大小比例 是另外一个视图的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)
    
           }
    
上一篇下一篇

猜你喜欢

热点阅读