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