改变UIView的框架并更新它的儿童约束

时间:2016-04-26 23:39:48

标签: ios swift uiview constraints

我需要根据按下的按钮更改UI元素,基本上它就像一个标签,但只是我的View Controller的一部分。我需要显示/隐藏的元素是UIView,里面有多个集合视图和标签。

我现在正在做什么在IB中以编程方式定义两个对象,当我需要显示一个时,我只需将其中一个的宽度设置为0,并为另一个设置一个具有整个宽度的新帧我想。这种方法的问题在于,即使UIView是我想要的,内部的内容似乎保持先前的约束(居中),并且他们不会适应"到整个宽度。

当前代码:

var newFrame = self.view.frame
newFrame.origin.x = 0
newFrame.origin.y = self.blueView.frame.origin.y
newFrame.size.height = self.blueView.frame.size.height

if (showGreen){

    self.greenView.frame = newFrame
    self.greenView.hidden = false
    self.blueView.frame.size.width = 0.0
    self.blueView.hidden = true

}else{

    self.blueView.frame = newFrame
    self.blueView.hidden = false
    self.greenView.frame.size.width = 0.0
    self.greenView.hidden = true
}

在IB中,我为两个视图设置了约束,使它们与边距之间没有分离。

我希望您能帮助我解决这个问题或者采用其他方式来实现理想的行为行为。

谢谢。

current situation and desired behaviour

1 个答案:

答案 0 :(得分:3)

你应该改变constraint.constant值,而不是UIView的框架, 为您需要的约束制作一个IBOutlets,然后改变它:

self.widthConstraint.constant = newValue;
    [UIView animateWithDuration:0.3 animations:^{
        [self.view layoutIfNeeded];
    }];