Ios7 使用自动布局隐藏时,隐藏并显示UIView,底部视图填充空间

Ios7 使用自动布局隐藏时,隐藏并显示UIView,底部视图填充空间,ios7,autolayout,Ios7,Autolayout,我有两种观点彼此重叠,就像这样。当我按下按钮时,我想隐藏灰色视图,让粉色视图向上移动到它的空间中。当我再次按下按钮时,我希望灰色视图重新出现,并将粉色视图移回其原始位置 我可以通过这样做来实现这一点 - (IBAction)toggle:(id)sender { if (self.top.hidden) { self.top.hidden = NO; self.top.layer.frame = CGRectMake(0, 0, 320, 50);

我有两种观点彼此重叠,就像这样。当我按下按钮时,我想隐藏灰色视图,让粉色视图向上移动到它的空间中。当我再次按下按钮时,我希望灰色视图重新出现,并将粉色视图移回其原始位置

我可以通过这样做来实现这一点

- (IBAction)toggle:(id)sender {
    if (self.top.hidden) {
        self.top.hidden = NO;
        self.top.layer.frame = CGRectMake(0, 0, 320, 50);
        self.bottom.layer.frame = CGRectMake(0, 50, 320, 50);
    } else {
        self.top.layer.frame = CGRectMake(0, 0, 0, 0);
        self.bottom.layer.frame = CGRectMake(0, 0, 320, 50);
        self.top.hidden = TRUE;
    }
}
然而,据我所知,关于autolayout的一般智慧是不要在代码中以编程方式设置帧大小。所以我的问题是,如何使用autolayout实现相同的结果


基本上是这个问题的iPhone版本:

找到了这个问题的答案:

简言之:

- (IBAction)toggle:(id)sender {
    if (self.top.hidden) {
        self.top.hidden = NO;
        [UIView animateWithDuration:0
                         animations:^{
                             self.verticalSpace.constant += 50.0;
                             [self.view layoutIfNeeded];
                         }];
    } else {
        [UIView animateWithDuration:0
                         animations:^{
                             self.verticalSpace.constant -= 50.0;
                             [self.view layoutIfNeeded];
                         }];
        self.top.hidden = TRUE;
    }
}
其中,
self.verticalSpace
是在底视图和顶视图之间设置的约束