1.NSLayoutConstraint 设置优先级 2.删除更新约束(添加标识)

 //显示提交按钮 时的约束

    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()

  

原文地址:https://www.cnblogs.com/qingzZ/p/12329985.html