2

我第一次玩 iOS 6 自动布局,我正在尝试弄清楚如何混合自动布局和动画。

我有容器视图 ViewA,它有一定的高度。我有一个UIDatePicker ViewB,它有216 高,并且有一个约束将ViewA 和ViewB 之间的垂直空间设置为0,因此ViewB 基本上固定在ViewA 的底部。

在此处输入图像描述

我想对 ViewA 的高度进行动画处理以使其更小,并使 ViewB 始终保持在 ViewA 的底部。

[UIView animateWithDuration:2.0 animations:^{
    CGRect containerFrame = self.tableContainerView.frame;
    containerFrame.size.height -= self.datePicker.frame.size.height;
    self.tableContainerView.frame = containerFrame;

} completion:^(BOOL finished) {
    NSLog(@"Done");
}];

容器视图 ViewA 确实按预期变短了,但 ViewB 并没有跟随。

如何获得 ViewA 和 ViewB 之间的约束以在动画期间自动调整 ViewB 的位置?

4

1 回答 1

3

从您的限制看来,它应该可以工作。问题可能出在您制作动画的方式上。您应该使用约束而不是框架来做到这一点。如果 viewA 对超级视图的底部有一个约束,那么您可以只为该约束的常量设置动画。为该底部约束创建一个 IBOutlet,然后执行此操作(在我的示例中,bottomCon 是出口):

self.bottomCon.constant = self.datePicker.bounds.size.height;
[UIView animateWithDuration:2.0 animations:^{
    [self.view layoutSubviews];
    [self.containerView layoutSubviews]; 
} completion:^(BOOL finished) {
    NSLog(@"Done");
}];

在我的编辑中,我还添加了 [self.containerView layoutSubviews] 行。这是必要的,以便它的子视图也正确更新(否则它们只会跳转到新位置)。

于 2013-05-05T23:50:19.783 回答