2014-03-31 45 views
3

我在其中一個項目上實現了「無限滾動」,並且正在玩弄新的estimatedHeightForRowAtIndexPath:委託方法。一旦我實現了這個委託方法,當我調用reloadData時(這發生在我添加一組新行時發生),我的tableView跳轉(也就是滾動到底部)。Implementing estimatedHeightForRowAtIndexPath:導致tableView在重新加載時向下滾動

沒有該方法,我的tableView保持原位,沒有任何滾動的tableView底部的附加行。

我打電話給[tableView reloadData]而不是其他方法(insertRowsAtIndexPaths:)。因爲我正在重新加載整個表格,所以我不會調用beginUpdates或endUpdates。

有沒有人遇到過這個?我

+0

沒有添加和數組的值你不能更多地滾動tableView。 –

+0

我不確定我是否瞭解你。比方說,我最初在數組中有10個項目,每個項目是tableView中的一行,只要用戶向下滾動到第8個項目,我添加另一組項目,所以我的數組數目是20現在有20行的tableView。如果用戶繼續留在第8行,並且我調用reloadData,則它跳轉到第11項(當estimatedHeightForRowAtIndexPath:實現時)。 – newDeveloper

+0

你有沒有真正解決這個問題?我有同樣的問題,我寧願tableview不要跳... ... – Georg

回答

6

因此,這裏是我的所作所爲,以減少跳躍,同時重新加載的tableView。

estimatedHeightForRowAtIndexPath:我開始返回一個更好的估計高度。高度越精確,減少跳躍,同時向底部添加新的行。

我也開始將計算的單元格高度從heightForRowAtIndexPath:緩存到字典中,並在下次調用estimatedHeightForRowAtIndexPath:時返回緩存的值。

希望這可以幫助任何遇到此問題的人。

+0

好得多,但不是完全 – leavez

+0

這完全解決了我的問題。在'willDisplayCell'中,我將渲染後的單元格的值存儲在一個數組中。當'estimatedHeightForRowAtIndexPath'被調用時,它返回緩存的值。值總是準確的,因爲總是調用「willDisplayCell」。即使它們不是,它們最多也不會像我的像素。乾杯!這讓我非常頭疼。 – dimiguel

0

入住此滾動視圖Delagete方法您的病情,

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
+0

再次我想我迷失在這裏。如果我錯了,隨時糾正我。我知道一個tableView實現UIScrollViewDelegate,它可能會在reloadData發生時調用這個方法(我的猜測是它調用了scrollViewDidScroll:first),你是否建議我強制讓tableView不滾動(通過將contentOffset設置爲先前的價值)?這似乎是一個解決方法,而不是一個適當的修復。 – newDeveloper

2

不久前我提交了一個BugReport(16472265),今天得到了它在iOS8中修復的響應。試過了,現在按預期工作。沒有更多的桌面跳躍! Wohoooo

+0

謝謝。很高興知道。 – newDeveloper

相關問題