reloadSections:withRowAnimation:不更新行数

时间:2014-09-19 18:42:57

标签: ios objective-c iphone ios8

我在小部件中有一个UITableView,我希望用动画重新加载它。 [self.tableView reloadData]效果很好,但重新加载不是动画。我知道我应该使用reloadSections:withRowAnimation:进行动画制作,但是存在问题。

该表确实正在更新,numberOfRowsInSection:返回新值,但在视觉上看到的行数仍然相同。

例如:如果我有一个UITableView有2行而我想将其更新为4行,那么表格中仍会有2行。这两个单元格中的内容将按预期更新,但应该有4个单元格。我知道numberOfRowsInSection:会返回4。

调用[self.tableView reloadData]而不是reloadSections:withRowAnimation:

时,不会发生此问题

我找到的解决方法就是这个简短的片段:

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView reloadData];

一个接一个地调用这两个方法,用动画和4个单元重新加载表。我假设这是一个iOS 8错误,也许是因为我在一个小部件中使用tableView?

1 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但为了参考。 reloadSections: withRowAnimation:仅重新加载当前可见的单元格。您应该使用insertRowsAtIndexPaths: withRowAnimation:添加您想要的另外两行。

docs对这些信息似乎有点稀疏(含糊不清?),但他们确实说:

  

调用此方法会导致表视图向其数据源询问指定节的新单元格。

没有明确说明它会要求新的行数,正如您在遇到的行为中所看到的那样,这恰好是真的。