动态更新约束问题(SnapKit 的使用)

当控件B可能不显示,且控件C依赖B设置约束,B又依赖A时,会出现约束更新问题。使用SnapKit框架可以有效解决这种自动布局的动态约束更新挑战。文章介绍了初始约束设置及子控件大小变化时的约束更新方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新约束问题

问题描述:
如果一个控件B有可能会不显示,但是另外一个控件C在B 显示的时 候会依赖B 来设置约束,而 B 依赖 A 设置约束
此时就会有依赖约束的更新问题

解决办法:使用自动布局 框架 SnapKit

  • 初始约束设置

    //首先添加A,B,C 之间的约束--B,C 是 A 的子控件, B 在 C 上面, A 的高度根据 C 的底部确定
     var CBottomConstrains: Constrain?
    A.addSubview(B)
    A.addSubview(C)

    B.snp_makeConstraints { (make) -> Void in
        make.top.equalTo(A).offset(8)
        make.leading.trailing.equalTo(A)
    }


    C.snp_makeConstraints { (make) -> Void in
        //记录C 的顶部约束
        CBottomConstrains =  make.top.equalTo(B.snp_bottom).constrain
        make.leading.trailing.equalTo(A)
    }



    A.snp_makeConstraints { (make) -> Void in

        make.bottom.equalTo(C)
    }
  • 子控件大小变化时的约束更新
    if B.hidden = true{


        //1.先卸载约束
        CBottomConstrains?.uninstall()

        //2.更新约束
        A.snp_makeConstraints { (make) -> Void in

            //3.当 B 不显示时, C 的 top就跟 A 的top 对齐
            CBottomConstrains = make.top.equalTo(A.snp_top).constraint
        }


    }B.hidden = false{

        //1.先卸载约束
        CBottomConstrains?.uninstall()

        //2.更新约束
        C.snp_makeConstraints { (make) -> Void in
            //3.当 B 显示时, C 的 top 就更 B 的 bottom 对齐
            CBottomConstrains = make.top.equalTo(B.snp_bottom).constraint
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值