20

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

当我打电话时,

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

或者

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

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

如果我将其中任何一个注释掉并仅使用 reloadData 它可以正常工作,但是出于性能原因,我宁愿不执行 reloadData 重新更新不需要更新的单元格。

谢谢!

4

4 回答 4

48

这是一个答案

[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];
}];

迅速

UIView.performWithoutAnimation {
            self.bubbleTableView.reloadSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.None)
        }
于 2014-06-24T11:09:20.627 回答
9

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

[UIView performWithoutAnimation:^{
    [tableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone];
}];
于 2015-12-07T12:10:23.027 回答
0

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

于 2013-05-20T14:39:33.843 回答
-3

我在 iOS 模拟器上发现这发生在我身上。几次重新加载后,它正常工作,没有动画。可能只是模拟器中的一个错误。

于 2013-07-03T04:14:15.067 回答