更新約束問題
問題描述:
如果一個控件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
}
}