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

更新约束问题

问题描述:
如果一个控件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
        }

    }

你可能感兴趣的:(SnapKit,约束)