UITableView reloadSection和reloadRowsAtIndexPaths会导致奇怪的动画

时间:2013-05-20 14:30:20

标签: objective-c uitableview animation lazy-loading

我正在为我的UITableView进行延迟加载,因此我尝试在图像更新时重新加载各行。然而,我遇到了一个奇怪的问题。

当我打电话时,

    [self.bubbleTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone];

OR

    [self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];

当我特别说“无动画”时,它仍然会动画,动画是图像占据整个单元格并迅速缩小到正常大小。此外,如果我将其更改为任何其他动画,则无论采用何种设置,它都会执行相同的动画。

如果我评论其中任何一个并且只是使用reloadData它工作正常,但我不想做reloadd重新更新不需要更新的单元格的性能原因。

谢谢!

4 个答案:

答案 0 :(得分:42)

Here was an answer

[UIView setAnimationsEnabled:NO];
[self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
[UIView setAnimationsEnabled:YES];

它对我有用。

UPD。与@Şafak-gezer的块相同

[UIView performWithoutAnimation:^{
    [self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
}];

<强> SWIFT

UIView.performWithoutAnimation {
            self.bubbleTableView.reloadSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.None)
        }

答案 1 :(得分:8)

以下方法适用于我:(适用于iOS 7及更高版本)

[UIView performWithoutAnimation:^{
    [tableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
}];

答案 2 :(得分:0)

使用cellForRowAtIndexPath:仅更新您感兴趣的单元格。

答案 3 :(得分:-3)

我在iOS模拟器上发现了这件事。经过一些重新加载后,它正常工作,没有动画。可能只是模拟器中的一个错误。