动画或仅更新约束仅对我更改的一半视图有效

时间:2019-04-11 12:03:04

标签: objective-c xcode

我有一个带有4个按钮(see drawing)的容器视图

我想为按钮3和4设置动画(都具有90高) 并相应地更改容器视图

因此,通过更改其框架,将两个按钮的高度都设为0。 并将容器的高约束常数从200更改为100 然后调用layoutIfNeeded。

我做了一个按钮来测试该代码。

问题是只有一种变化发生!

- (IBAction)testButton:(UITapGestureRecognizer *)sender {
    CGRect frame = button3.frame;
    frame.size.height = 0;
    button3.frame = frame;
    CGRect frame1 = button4.frame;
    frame1.size.height = 0;
   button4.frame = frame1;
    buttonContainerHeightConstraint.constant = 100;
    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];

当我单击“测试”按钮时,只有容器会更改其大小!按钮3和4仍在同一位置,但是由于容器的高度现在为100,因此它们在容器“外部”。 只有当我再次单击testButton时,按钮3和4也会消失

我对它进行了精制,使其看起来像我可能会使用的方式。

    - (void)showButton3:(Boolean)show {
    CGRect frame = button3.frame;
    frame.size.height = show ? 90 : 0;
    button3.frame = frame;
    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];
}
- (void)showButton4:(Boolean)show {
    CGRect frame1 = button4.frame;
    frame1.size.height = show ? 90 : 0;
    button4.frame = frame1;
    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];
}
- (void)shrinkBtnContainer:(Boolean)shrink {
    buttonContainerHeightConstraint.constant = shrink ? 100 : 200;

    [UIView animateWithDuration:0.2 animations:^{
        [self.view layoutIfNeeded];
    }];
}

- (IBAction)testButton:(UITapGestureRecognizer *)sender {
    [self showButton3:false];
    [self showButton4:false];
    [self shrinkBtnContainer:true];    
}

同样的事情发生在我点击按钮之后,它首先隐藏了容器,如果再次点击它,它隐藏了按钮。 那么我在这里做错了什么?


注意事项: *我在ios7上工作,所以没有stackViews和锚点:( *我尝试在没有动画块的情况下执行此操作,并且得到了相同的效果。


编辑* 最后,我删除了buttonContainer高约束,使两个底部按钮都对buttonContainer具有约束,并且当2个按钮的高度变为0(通过高度约束,不是框架变化)时,容器会自动收缩以保持底部约束。

我仍然想知道为什么它最初不起作用

0 个答案:

没有答案