我有一个带有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(通过高度约束,不是框架变化)时,容器会自动收缩以保持底部约束。
我仍然想知道为什么它最初不起作用