美文网首页
SnapKit的使用

SnapKit的使用

作者: NicoalsNC | 来源:发表于2022-05-27 17:29 被阅读0次

    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)
    
    • 设置视图的大小(width,height),他们效果是一样的

      make.width.height.equalTo(100)
      或
      make.width.equalTo(100)
      make.height.equalTo(100)
      或
      make.size.equalTo(CGSize(width: 100, height: 100))
      
    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)
      
             }
      

    相关文章

      网友评论

          本文标题:SnapKit的使用

          本文链接:https://www.haomeiwen.com/subject/hxqvprtx.html