swift之SnapKit

作者: 小羊爱学习 | 来源:发表于2023-11-02 18:41 被阅读0次

SnapKit下载地址:

https://github.com/SnapKit/SnapKit

SnapKit布局:

由于从snapKit源码可以得知,SnapKit会自动将view的translatesAutoresizingMaskIntoConstraints设置为false,因此在使用SnapKit布局时不用再设置了。

        view1.snp.makeConstraints { make in
            make.left.equalToSuperview() // view1的左边距父视图左边0
            make.left.equalToSuperview().offset(50) // view1的左边距父视图左边50
            make.left.equalTo(view2.snp.right) // view1的左边距view2的右边0
            make.left.equalTo(view2.snp.right).offset(50)// view1的左边距view2的右边50

            make.width.equalToSuperview() // view1的宽和父视图一样
            make.width.equalToSuperview().offset(-50) // view1的宽比父视图的宽少50
            make.width.equalTo(view2.snp.width) // view1的宽和view2的宽一样
            make.width.equalTo(view2.snp.width).offset(50) // view1的宽比view2的宽多50

            make.center.equalToSuperview() // view1的中心和父视图一样
            make.center.equalToSuperview().offset(50) // view1的中心距离父视图中心x、y各50
            make.center.equalTo(view2) // view1的中心和view2的中心一样
            make.center.equalTo(view2).offset(-50) // view1的中心距离view2的中心x、y各-50

            make.centerX.equalToSuperview() // view1的x轴距离父视图的x轴0
            make.centerX.equalToSuperview().offset(50) // view1的x轴距父视图x轴50
            make.centerX.equalTo(view2) // view1的x轴距离view2的x轴0
            make.centerX.equalTo(view2).offset(-50) // view1的x轴距离view2的x轴-50

            make.left.lessThanOrEqualToSuperview() // view1的左边距离父视图的左边0或者更少
            make.left.lessThanOrEqualToSuperview().offset(50) // view1的左边距离父视图的左边在50内
            make.left.lessThanOrEqualTo(view2.snp.right) // view1的左边距离view2的右边0或者更少
            make.left.lessThanOrEqualTo(view2.snp.right).offset(50) // view1的左边距离view2的右边在50内

            make.left.greaterThanOrEqualToSuperview() // view1的左边距离父视图的左边0或者更多
            make.left.greaterThanOrEqualToSuperview().offset(50) // view1的左边距离父视图的左边在50或者以上
            make.left.greaterThanOrEqualTo(view2.snp.right) // view1的左边距离view2的右边0或者更多
            make.left.greaterThanOrEqualTo(view2.snp.right).offset(50) // view1的左边距离view2的右边在50或者以上
            
            make.width.equalTo(100) // view1的宽为100
            make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(50) // view1的顶部距离self.view的顶部安全区距离再加50
            make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(-50) // view1的地部距离self.view的底部安全区距离再加50
        }

SnapKit更改约束

1.使用remakeConstraints:删除原来的所有约束,重新布局约束

        view1.snp.remakeConstraints { make in
            make.center.equalToSuperview()
            make.width.equalTo(100)
            make.height.equalTo(100)
        }

2.使用updateConstraints:更新约束,覆盖已有约束

        view1.snp.updateConstraints { make in
            make.width.equalTo(150)
        }

在更新约束时千万不要使用makeConstraints,因为makeConstraints是直接添加约束,保留了旧的约束,也就是不会删除原来的约束,会导致约束个数大于基本的四个(也就是可能会出现两个设置宽度或者高度的约束),造成编译错误

相关文章

网友评论

    本文标题:swift之SnapKit

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