//顯示提交按鈕 時的約束
private var svBottomCon:NSLayoutConstraint? //隱藏提交按鈕 時的約束 private var svUpdateBottomCon:NSLayoutConstraint? //顯示有數據的UI , 不能編輯,隱藏提交按鈕 此時設至 高約束等級 defaultHigh
func showDataUI(){
bindCardView.updateTempUI()
self.submitBtn.isHidden = true
if #available(iOS 11.0, *) {
svUpdateBottomCon = scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20)
} else {
svUpdateBottomCon = scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -20)
}
svUpdateBottomCon?.priority = UILayoutPriority.defaultHigh svUpdateBottomCon?.isActive = true
}
//默認UI 設置 第一次的約束等級是defaultLow
if #available(iOS 11.0, *) {
scrollView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20).isActive = true
svBottomCon = scrollView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -102)
submitBtn.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -30).isActive = true
} else {
scrollView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
svBottomCon = scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -102)
submitBtn.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -30).isActive = true
}
svBottomCon?.priority = UILayoutPriority.defaultLow
svBottomCon?.isActive = true
刪除約束 操作:可以查看 源碼:
https://github.com/jiyongTeam/JYFilterView
1. 給約束添加標識
// 每個的約束,追加identifier
let topConstraint = currentItem.topAnchor.constraint(equalTo: self.itemsContainerView.topAnchor, constant: (itemHeight + itemYSpacing) * CGFloat(i))
topConstraint.identifier = "JYFilterItemView"
topConstraint.isActive = true
let widthConstraint = currentItem.widthAnchor.constraint(equalTo: self.itemsContainerView.widthAnchor, multiplier: itemWidthScale, constant: -spacingItemGapWidth)
widthConstraint.identifier = "JYFilterItemView"
widthConstraint.isActive = true
let heightConstraint = currentItem.heightAnchor.constraint(equalToConstant: itemHeight)
heightConstraint.identifier = "JYFilterItemView"
heightConstraint.isActive = true
if lastItem == nil{
let leftConstraint =
currentItem.leftAnchor.constraint(equalTo: self.itemsContainerView.leftAnchor, constant: horizontalMagin)
leftConstraint.identifier = "JYFilterItemView"
leftConstraint.isActive = true
}else{
let leftConstraint = currentItem.leftAnchor.constraint(equalTo: (lastItem?.rightAnchor)!, constant: itemXSpacing)
leftConstraint.identifier = "JYFilterItemView"
leftConstraint.isActive = true
}
// 最后一行
if i == rows - 1{
let bottomConstraint = currentItem.bottomAnchor.constraint(equalTo: self.itemsContainerView.bottomAnchor, constant: 0)
bottomConstraint.identifier = "JYFilterItemView"
bottomConstraint.isActive = true
}
約束更新處理, 刪除原來的約束
//約束更新的處理: 刪除子視圖相關的所有約束
let associatedConstraints = itemsContainerView.constraints.filter {
$0.identifier == "JYFilterItemView"
}
NSLayoutConstraint.deactivate(associatedConstraints)
itemsContainerView.removeConstraints(associatedConstraints)
itemViewList.forEach {
let itemConstraints = $0.constraints.filter {
$0.identifier == "JYFilterItemView"
}
NSLayoutConstraint.deactivate(itemConstraints)
$0.removeConstraints(itemConstraints)
}
//業務邏輯
for item in itemViewList{
item.updateViewStyle(style.itemViewStyle)
}
configItems()
