iOS 6设置视图大小的动画,并使约束移动其他视图

iOS 6设置视图大小的动画,并使约束移动其他视图,ios,ios6,core-animation,autolayout,Ios,Ios6,Core Animation,Autolayout,我第一次玩iOS 6自动布局,我想知道如何混合自动布局和动画 我有容器视图,ViewA,它有一定的高度。我有一个UIDatePicker,ViewB,它有216高,有一个约束,设置ViewA和ViewB之间的垂直空间=0,因此ViewB基本上固定在ViewA的底部 我想设置ViewA高度的动画,使其变小,并使ViewB始终固定在ViewA的底部 [UIView animateWithDuration:2.0 animations:^{ CGRect containerFrame = s

我第一次玩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的位置?

从您的约束来看,它应该可以工作。问题可能在于您制作动画的方式。您应该使用约束而不是框架来执行此操作。如果viewA对superview的底部具有约束,则可以仅设置该约束常量的动画。将IBOutlet设置为该底部约束,然后执行此操作(在我的示例中,bottomCon是出口):


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

ViewA没有高度约束。我该怎么做?ViewA有一个顶部空间约束=Superview和底部空间约束=Superview,因此它对于3.5英寸和4英寸的设备是灵活的。@Kennyyland,我认为它对日期选择器有底部约束,而不是Superview。拾取者是否在屏幕下方?@Kennyyland,我根据你的评论编辑了我的答案。这会将视图缩短到日期选择器的高度。ViewA填充superview以开始,是的,ViewB在屏幕底部关闭。ViewA最初应该填充superview,但当我想在屏幕上设置日期选择器ViewB的动画时,我想缩短ViewA以腾出空间。ViewB连接到ViewA的底部,但ViewA没有连接到B的顶部。在我的书中,关于动画和自动布局的讨论可能会很有用。基本上,它们相互冲突——在我看来,这是autolayout的一个巨大缺点。这就好像在iOS 6创建时,自动布局人员忘记咨询动画人员一样。以下是本书该部分的链接:
self.bottomCon.constant = self.datePicker.bounds.size.height;
[UIView animateWithDuration:2.0 animations:^{
    [self.view layoutSubviews];
    [self.containerView layoutSubviews]; 
} completion:^(BOOL finished) {
    NSLog(@"Done");
}];