美文网首页
【OC转Swift】自动布局框架:Massonry 与 Snap

【OC转Swift】自动布局框架:Massonry 与 Snap

作者: MR_詹 | 来源:发表于2021-03-04 11:05 被阅读0次

Massonry 与 SnapKit 同源,所以大部分的使用规则和方法都是相似的,这里做个简单的笔记

设置抗拉伸、抗压缩等级
只要针对UILabel并排时的布局

/// 抗拉伸 、 抗压缩使用
    func contentPriorityDemo() {
        let leftlb: UILabel = UILabel()
        leftlb.text = "我是左边"
        leftlb.backgroundColor = .yellow
        self.view.addSubview(leftlb)

        let rightlb: UILabel = UILabel()
        rightlb.text = "我是右边"
        rightlb.backgroundColor = .blue
        self.view.addSubview(rightlb)
        
        
        leftlb.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(10)
            make.right.equalTo(rightlb.snp.left)
            make.height.equalTo(64)
            make.centerY.equalToSuperview()
        }
        
        rightlb.snp.makeConstraints { (make) in
            make.right.equalToSuperview().offset(-10)
            make.height.centerY.equalTo(leftlb)
        }
        
        /// 设置抗拉伸等级
        leftlb.setContentHuggingPriority(.defaultHigh, for: .horizontal)
        /// 与上面的效果相同
        /// rightlb.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    }

尺寸比例设置

/// 尺寸比例大小设置
    func multipCOnstranintsDemo() {
        let outBox: UIView = UIView()
        outBox.backgroundColor = .orange
        self.view.addSubview(outBox)
        
        let inBox: UIView = UIView()
        inBox.backgroundColor = .green
        outBox.addSubview(inBox)
        
        outBox.snp.makeConstraints { (make) in
            make.size.equalTo(CGSize(width: 100, height: 100))
            make.center.equalToSuperview()
        }
        
        /// 设置:inBox的宽高尺寸 比 outBox的宽高都小50
//        inBox.snp.makeConstraints { (make) in
//            make.size.equalTo(outBox).offset(-50)
//            make.center.equalTo(outBox)
//        }
        
        /// 设置:inBox的宽高 是 outBox宽高的 一半
        inBox.snp.makeConstraints { (make) in
            make.center.equalTo(outBox)
            make.size.equalTo(outBox).multipliedBy(0.5)
        }
    }

约束保存与更新
这是SnapKit特有的,日常使用很方便

/// 保存约束(便于更新)
    var topConstraint: Constraint?

/// 约束保存与更新
    func constraintsSaveAndUpdateDemo() {
        box.backgroundColor = .red
        self.view.addSubview(box)
        
        box.snp.makeConstraints { (make) in
            make.height.equalTo(64)
            make.width.equalTo(self.view)
            /// 保存约束
            self.topConstraint = make.top.equalToSuperview().offset(100).constraint
        }
        
        /// 更新约束
        self.topConstraint?.update(inset: 200)
    }

约束等级设置、约束更新带动画

/// snap约束更新带动画
    func constrainsUpdateWithAnimationDemo() {
        box.backgroundColor = .orange
        self.view.addSubview(box)
        
        /// 设置box的宽高不能超过屏幕
        /// 并且设置宽高的值得优先级250(默认的优先级是1000,
        /// 这是最高等级,不能设置超过1000,否则编译错误)
        box.snp.makeConstraints { (make) in
            make.width.height.lessThanOrEqualTo(self.view.snp.width)
            make.width.height.lessThanOrEqualTo(self.view.snp.height)
            make.center.equalToSuperview()
            make.width.height.equalTo(50 * self.scale).priority(250)
        }
        
        /// 添加点击事件,每点击一次放大box
        let tapSingle = UITapGestureRecognizer(target: self, action: #selector(tapSingleDid))
        self.view.addGestureRecognizer(tapSingle)
    }
    /// 设置发大倍数,并且设置动画
    @objc func tapSingleDid() {
        self.scale += 0.2
        self.view.setNeedsUpdateConstraints()
        UIView.animate(withDuration: 0.3) {
            self.view.layoutIfNeeded()
        }
    }
    /// 更新box约束
    override func updateViewConstraints() {
        self.box.snp.updateConstraints { (make) in
            make.width.height.equalTo(100 * self.scale).priority(250)
        }
        super.updateViewConstraints()
    }

相关文章

网友评论

      本文标题:【OC转Swift】自动布局框架:Massonry 与 Snap

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