2014-09-19 239 views
2

我有一個UITableView在小部件中,我希望用動畫重新加載它。 [self.tableView reloadData]工程很好,但重新加載不是動畫。我知道我應該使用reloadSections:withRowAnimation:進行動畫製作,但還有一個問題。reloadSections:withRowAnimation:不更新行數

該表確實正在更新,並且numberOfRowsInSection:返回新值,但在視覺上看到的行數仍然相同。

例如:如果我有一個帶有2行的UITableView,我想將它更新爲4行,表中仍然有2行。這兩個單元內的內容將按預期進行更新,但應該有4個單元。我知道numberOfRowsInSection:返回4

調用,而不是reloadSections:withRowAnimation:

我發現了這一小段的解決方法[self.tableView reloadData]時,不會發生此問題:

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

調用兩種方法之一後,其他人用動畫和4個單元格重新載入表格。我認爲這是一個iOS 8的bug,也許是因爲我在一個小部件中使用tableView?

+0

您應該使用 reloadRowsAtIndexPaths:withRowAnimation:notreloadSections:withRowAnimation – rdelmar 2014-09-19 19:49:00

+0

@rdelmar爲什麼我要重新加載整個部分並添加新行時使用此方法? – 2014-09-20 10:26:57

+0

我仔細研究了一下,reloadSections應該可以正常工作(它適用於iOS 8)。你需要顯示更多的代碼;具體而言,您如何更新數據源以及您要調用reloadSections的位置。 – rdelmar 2014-09-20 15:51:58

回答

2

我知道這是一個老問題,但爲了參考。 reloadSections: withRowAnimation:只重新加載當前可見的單元格。您應該改用insertRowsAtIndexPaths: withRowAnimation:來添加您想要的兩個附加行。

docs這個信息似乎有點稀疏(曖昧?),但他們說:

調用此方法將導致表視圖來詢問的指定部分新的細胞它的數據源。

沒有明確說明它會要求新的行計數,正如您在遇到的行爲中看到的那樣,這恰好是正確的。