通过代码 新增 和 “修改”NSLayoutConstraint

湛同
2023-12-01

今天因为要弄一个瀑布流里面item的动态加载,

所以考虑把里面的一些空间的高度设成0从而实现“隐藏”效果

网上对这类修改是 关联 NSLayoutConstraint

然后设置对应的constant

下面是网上的答案,但是注意了,要用父类layoutIfNeeded()来重新布局

If you are adding constraint programatically like this:

var constraintButton = NSLayoutConstraint (item: buttonPlay, 
                                           attribute: NSLayoutAttribute.Bottom, 
                                           relatedBy: NSLayoutRelation.Equal, 
                                           toItem: self.view, 
                                           attribute: NSLayoutAttribute.Bottom, 
                                           multiplier: 1,
                                           constant: 0)
// Add the constraint to the view
self.view.addConstraint(constraintButton)

Then you can update it this way:

self.constraintButton.constant = 50
self.view.layoutIfNeeded()

And if you want that with animation you can do it this way:

self.view.layoutIfNeeded()
UIView.animateWithDuration(1, animations: {
    self.constraintButton.constant = 50
    self.view.layoutIfNeeded()
})


If you are adding constraint programatically like this:

var constraintButton = NSLayoutConstraint (item: buttonPlay, 
                                           attribute: NSLayoutAttribute.Bottom, 
                                           relatedBy: NSLayoutRelation.Equal, 
                                           toItem: self.view, 
                                           attribute: NSLayoutAttribute.Bottom, 
                                           multiplier: 1,
                                           constant: 0)
// Add the constraint to the view
self.view.addConstraint(constraintButton)

Then you can update it this way:

self.constraintButton.constant = 50
self.view.layoutIfNeeded()

And if you want that with animation you can do it this way:

self.view.layoutIfNeeded()
UIView.animateWithDuration(1, animations: {
    self.constraintButton.constant = 50
    self.view.layoutIfNeeded()
})
 类似资料: