动画UIView框架不受约束?

时间:2014-02-27 10:20:08

标签: ios autolayout

我想要实现的是当我点击按钮时,动画帧要调整大小,这样底线位置不会改变,高度会降低。这部分正在发生。我还希望上标签向下移动,框架的上边界和下标签保持不变。所以我在IB中为下标签设置了约束,使其垂直空间为20像素,优先级为1000.

- (IBAction)tapTap:(id)sender {
    //[self.containerView layoutIfNeeded];
    [UIView animateWithDuration:1.5 animations:^{
        CGRect rect = CGRectOffset(self.containerView.frame, 0, 30);
        rect.size.height -= 30;
        self.containerView.frame = rect;
        //[self.containerView layoutIfNeeded];
    } completion:NULL];
}

较低的标签也是动画,不会留下来。在尝试layoutIfNeeded之后我最好的猜测是,在动画帧时我不能依赖约束。如果这是真的,那将是什么解决方案?

enter image description here

1 个答案:

答案 0 :(得分:1)

AutoLayout的第一条规则:请勿触摸框架(或中心)。

看起来你已经找到了答案但是这样做的方法是保持对你想要改变的约束的引用。例如,如果要上下移动视图,则存储一个垂直约束,用于设置视图上的垂直位置。现在,当您为此约束设置动画时,视图将使用它进行动画处理。

self.topConstraint.constant = 50;
// etc...

您可以通过CTRL拖动它们来创建对约束的属性引用,就像按钮,标签等一样.​​.....