2010-10-04 23 views
1

我有一個帶有大約100行的UITableView的iPad應用程序。單元格是自定義的,我已經實現了heightForRowAtIndexPath來告訴UITableView我的單元格有多大。scrollToRowAtIndexPath不滾動到3/4行之後的正確行

我使用這個:

[tableView scrollToRowAtIndexPath:indexPath 
       atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 

表中滾動到給定的行。這對第1-75行非常適用。第76行略偏離中間,76-79略偏離第80行,它不再滾動到正確的位置。它只是保持行79是最後一個可見行。當發生這種情況時,我仍然可以通過拖動手指來手動滾動表格;它顯然還沒有結束。然而,似乎以編程方式,scrollToRowAtIndexPath 認爲它實際上已經到達表的末尾。我希望這種行爲在表的最後,而不是行的3/4。

我在努力調試這裏發生的事情;我將不勝感激任何指針,這些指針可以幫助我找出爲什麼表格在我調用scrollToRowAtIndexPath時已經在結尾。

+0

更新:問題似乎是tableview是一部分的視圖不能正確調整大小。它被設置爲自動大小,但它繼續使用它在nib文件中的大小(這個視圖是最頂層的視圖)。因爲它比添加的視圖大,所以表的結尾位於視圖邊界之外。瞭解這一點,找到解決方案可能會更容易,但我一直無法找到解決方案。 – 2010-10-10 18:17:36

回答

-1

你寫你重寫heightForRowAtIndexPath:,但沒有什麼可以重載。你應該有一個實現UITableViewDelegate協議的委託,由tableView調用。

如果情況已經如此,您應該通過記錄值調用heightForRowAtIndexPath來檢查代理是否正常工作,或者在那裏中斷。

+0

是的,抱歉,這就是我的意思;高度函數被調用並且值是正確的(我也可以從單元格中看出它們,它們都被正確渲染)。 – 2010-10-04 18:50:31

2

我注意到這個問題被查看了很多,所以也許更多的人遇到這個問題。最終我發現這不是tableview的問題。它被放置在旋轉設備或從代碼調整大小時行爲異常的視圖中。 tableview實際上超出了它所處的視圖的邊界,所以輸出看起來很奇怪,但如果你認爲tableview超出了屏幕的邊界,它實際上是有意義的。

我通過清理視圖層次結構並確保調整大小和旋轉正常工作來解決此問題。

1

嘗試:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexRow inSection:indexSection] 
       atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 
3

我有同樣的問題,我想我明白髮生了什麼:表視圖已經執行另一個動畫和scrollToRowAtIndexPath被忽略。結束語在CATransaction塊的工作方法,我(SWIFT代碼):

CATransaction.begin() 

tableView.beginUpdates() 
tableView.scrollToRowAtIndexPath(cell.indexPath, atScrollPosition: .Middle, animated: true) 
tableView.endUpdates() 

CATransaction.commit() 

另一種解決方案,我用performSelectorWithDelay,與延遲足夠長的桌子上,以便完成其他動畫工作。

+0

一整天都在尋找解決方案。我的問題是系統正在計算最後一個單元只有一點點關閉。 這是什麼工作!非常感謝! – Tinkerbell 2017-02-26 14:14:45

+0

謝謝先生!這對我有用,並且確實是由於.reloadSections動畫在我試圖將.scrollToRow發生的同時發生的 – 2017-08-03 20:34:51