2015-07-21 73 views
0

在我的tableview中,我需要为每个单元格的UI设置动画效果,因为tableview会重新加载其数据。UITableView ReloadData动画单元格UI

这需要一个自定义动画,而不仅仅是一个淡入淡出或默认转换。

例如,当点击“编辑”按钮时,在我的视图中,tableview将重新加载,并且每个单元格将更新其用于此新编辑模式的UI。

但是,在此重新加载期间,我尝试使用UIView动画块来更新我的单元格中的UILabel的约束,但它不会动画。

这是我运行的代码,当我在我的tableview上调用reloadData。这在cellForRowAtIndexPath方法中被调用。

[UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^ 
    { 
     //does not animate 
     _lblContainerLeftConstraint.constant = 18; 
     [self setNeedsLayout]; 

     //does animate 
     _reorderIcon.alpha = 0.5f; 

    } completion:nil]; 

任何帮助将不胜感激,谢谢。

+1

我认为你需要在'willDisplayCell'中做到这一点。在动画块之前设置新的约束值并调用'[cell.contentView setNeedsLayout]'。然后在动画块中添加'[cell.contentView layoutIfNeeded]',该动画块应该在您的时间段内动画约束变化。 –

+0

这个伎俩!谢谢@RoryMcKinnel在下面放下正式答案,如果你喜欢,我会打勾。 –

+0

很高兴工作。发布为答案。 –

回答

0

我认为你需要在willDisplayCell而不是cellForRowAtIndexPath中做到这一点,因为它在显示之前被调用,尽可能接近它实际出现在屏幕上的点。

然后在动画块之前设置新的约束值,并且还调用[cell.contentView setNeedsLayout]来指示单元格内容需要布局。

最后只添加[cell.contentView layoutIfNeeded]和你的alpha变化动画块,应该动画你的时间段内的约束变化。