動態更新約束問題(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
        }

    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章