动画autoLayout约束在iOS 7上不起作用

时间:2015-08-23 19:58:22

标签: ios objective-c cocoa-touch autolayout constraints

我有一个UIButton只有4个与其高度,宽度,顶部,左边相关的约束。 当用户点击按钮时,我通过添加像这样的常量值来更新其顶部约束

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

-(void)updateMyButtonConstraints {
   myTopButtonConstraint.constant = 10;
}

当我在iOS 8上运行我的应用程序时,它的工作就像一个魅力,但在iOS 7上,约束动画不起作用,按钮基本上从点a移动到点b而没有任何动画

PS:我试图在开始动画之前放置更新约束指令,但它也没有工作

我该怎么做才能解决这个问题?我做错了什么?谢谢你的帮助

2 个答案:

答案 0 :(得分:4)

您以错误的顺序执行操作,并且您忘记通知布局系统需要布局。像这样:

[self updateMyButtonConstraints];
[self.view setNeedsLayout]; // not "layoutIfNeeded"!
[UIView animateWithDuration:0.4 animations:^{
    [self.view layoutIfNeeded];
}];

在我的测试中,它可以在iOS 7,iOS 8和iOS 9中进行动画制作。如果它不适合您,那么您正在做其他未透露的事情。

答案 1 :(得分:0)

Swift版本在这里。

self.updateMyButtonConstraints()
self.view.setNeedsLayout()
UIView.animate(withDuration: 0.4) {
    self.view.layoutIfNeeded()
}