Autolayout弄乱我的动画

时间:2014-09-24 19:06:26

标签: ios uitableview animation autolayout uiviewanimation

所以我在View Controller(不是UITableViewController)中有一个UITableView,并且支持iphone 6& 6 Plus我开始实施Autolayout。现在一切工作都很顺利,问题是我在UITableView的每个单元格内调整了UIViews的动画,现在动画没有调整内部视图的大小,约束似乎影响了UITableView内部的所有内容,即使我只是想让UITableView通过不同的设备居中......

我在UITableView上使用的约束是:

  • 中心X内容视图上的对齐
  • 垂直空间(位于内容视图的顶部,固定值= 114)
  • 垂直空间(位于内容视图底部,固定值= 0)
  • UITableView(320)上的固定宽度

所以基本上,如果我们在iphone 4-5s上,我们有一个使用屏幕的完整宽度的桌面视图,同时iphone 6& 6 Plus的中心桌面视图为320固定宽度。

这是我第一次使用AutoLayout,所以我不知道这些约束如何影响UITableView单元格内部视图的动画,这就是我打电话的方式:

//before the call
barraActual.frame = CGRectMake(20, 24, 5, 30);
barraPromedio.frame = CGRectMake(295, 24, 5, 30);

//animate
[UIView animateWithDuration:1.5 animations:^{
     barraActual.frame = CGRectMake(20, 24, periodoActual, 30);
     barraPromedio.frame = CGRectMake(20+periodoActual, 24, periodoAnterior, 30);
}];

编辑:请注意,视图(barraActual& barraPromedio)是UITableViewCell中的UIViews,此代码位于“ cellForRowAtIndexPath ”内。

如何阻止约束阻止我的视图调整大小? (因为我已尝试在没有动画调用的情况下设置帧,但也没有工作)

或者如何制作符合这些约束条件的动画调用?

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢莱因哈德·曼纳(ReinhardMänner)指导我,对于那些可能会发现自己有同样误解的人:

使用AutoLayout时更改视图的框架将不起作用(使用或不使用动画)。要进行更改,您需要设置新约束或更改现有约束(最有可能以编程方式)。

我在Interface Builder中创建了新约束来管理我想要动画的视图,现在我的动画块看起来像这样:

//animate
[UIView animateWithDuration:1.5 animations:^{
    ((NSLayoutConstraint*)(barraActual.constraints[1])).constant = periodoActual;
    ((NSLayoutConstraint*)(barraPromedio.constraints[0])).constant = periodoAnterior;
}];

晚安:)