UITableView ReloadData 动画单元格 UI

Posted

技术标签:

【中文标题】UITableView ReloadData 动画单元格 UI【英文标题】:UITableView ReloadData Animate Cell UI 【发布时间】:2015-07-21 18:48:17 【问题描述】:

在我的 tableview 中,当 tableview 重新加载其数据时,我需要为每个单元格的 UI 设置动画。

这需要自定义动画,而不仅仅是淡入淡出或默认过渡。

例如,当点击“编辑”按钮时,在我看来,表格视图会重新加载,并且每个单元格都会针对这种新的编辑模式更新其 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];

【问题讨论】:

我认为您需要在willDisplayCell 中执行此操作。在动画块之前设置新的约束值并调用[cell.contentView setNeedsLayout]。然后在动画块中添加[cell.contentView layoutIfNeeded],它应该在您的时间段内为约束更改设置动画。 成功了!谢谢@RoryMcKinnel 在下面留下一个官方答案,如果你愿意,我会给你打勾。 很高兴它成功了。作为答案发布。 【参考方案1】:

我认为您需要在 willDisplayCell 而不是 cellForRowAtIndexPath 中执行此操作,因为它是在 display 之前调用的,它尽可能接近它实际出现在屏幕上的位置。

然后在动画块前设置新的约束值,同时调用[cell.contentView setNeedsLayout]表示单元格内容需要布局。

最后只在动画块中添加 [cell.contentView layoutIfNeeded] 和您的 alpha 更改,这应该在您的时间段内为约束更改设置动画。

【讨论】:

以上是关于UITableView ReloadData 动画单元格 UI的主要内容,如果未能解决你的问题,请参考以下文章

UITableView ReloadData 动画单元格 UI

在 UITableView 上延迟 reloadData

使用带有 reloadData 的动画

控制 uitableview insertRowsAtIndexPath 动画的速度

如何在 UITableView 重新加载期间控制过渡动画? [复制]

UITableView 通过 JSON 更新,动画行插入