以编程方式更新约束

Updating constraints programmatically

情况就像我有一个带有四个按钮的视图

有一个条件,带有文本搜索社区的按钮应该被隐藏,选项按钮的宽度应该增加

第一次在我的项目中使用约束,我不知道如何实现它。从以下两张图片可以清楚地看出在这两个按钮上添加的一组约束。

向第一个按钮添加约束

  1. 引导 Space 到 NewView(灰色)
  2. 底部 space 到 NewView
  3. 顶部 Space 到顶部按钮(第一张和第二张图片中的蓝色)
  4. 宽度(从底部 - 右侧)

向第二个按钮添加约束

  1. 尾随 Space 到 NEwView
  2. 底部 space 到 NewView
  3. 顶部 Space 到顶部按钮(第一张和第二张图片中的蓝色)
  4. 水平space FirstButton(搜索社区)
  5. 宽度

我在你的设置中看到的问题是你在两个等宽的按钮之间有这个约束。在第一种情况下是这样,但是当你想隐藏其中一个时,就不再是这样了。

因此,您需要稍微重新考虑一下您的约束条件。也许您可以在第一个按钮(左边的按钮,您要隐藏的按钮)上使用静态宽度约束,而不是等宽约束。然后第二个,将只对第一个有一个水平 space 约束,对 superView 有一个尾随 space。

然后你在 VC 中为第一个按钮的宽度约束创建一个出口,当你想隐藏它时,你可以这样做:

self.searchButtonWidthConstraint.constant = 0 
UIView.animateWithDuration(0.3, animations: {  () -> Void in
       self.view.layoutIfNeeded() // if you want to animate the constraint change
})

如果您有任何问题,请告诉我。祝你好运,希望一切顺利!


更新


对于横向用例,您可以监听方向更改通知,以更新按钮的宽度约束

-(void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    self.searchButtonWidthConstraint.constant = LANDSCAPE_WIDTH
    UIView.animateWithDuration(duration, animations: {  () -> Void in
           self.view.layoutIfNeeded() // if you want to animate the constraint change
    })
}