2013-07-21 62 views
0

我想以編程方式以編程方式滾動tableview。請注意,我增加了內容大小,因此我只能看到最後幾行。我可以正確地手動滾動以獲得所需的indexpath,但通過編程方式,它不會發生。iOS:scrollToRowAtIndexPath不顯示正確的最後一頁的頂部索引路徑

[tableview reloadData]; 

CGSize size = tableview.contentSize; 
size.height += 1000; 
tableview.contentSize = size; 

int rows = [tableview numberOfRowsInSection:0]; 
int numberofRowsInView = 17; 
for (int i = 0; i < ceil((float)rows/numberofRowsInView); i++) { 
    [tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i * numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
    .... 
} 

對於總排60,我希望這個代碼返回0-16,17-33,34-50,51-59細胞意見,但最後滾動返回43-59即滿17行根據上面的代碼查看,頂部的indexpath應該是最後一頁的51!

有人可以幫我解決這個問題。謝謝。

這是手動滾動圖像:

Manually scrolling

這是編程方式:

Programmatically scrolling

回答

0

看來我不會得到這個工作。我只需要最後一頁的單元格,然後將其重置回原始的tableview框架。

int rows = [tableview numberOfRowsInSection:0]; 
int numberofRowsInView = 17; 

for (int i = 0; i < ceil((float)rows/numberofRowsInView); i++) { 
    NSUInteger remainingCells = rows - i*numberofRowsInView; 
    if(remainingCells < numberofRowsInView) { 
     CGRect frame = tableview.frame; 
     frame.size.height = remainingCells * tableview.rowHeight; 
     tableview.frame = frame; 
    } 

    [tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i * numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
    ...... 

    } 

現在,它正好說明了保持最後一頁的細胞!我不需要再設置contentSize。

1

如果17列適合在屏幕上,那麼你不能讓小於滾動顯示了17個項目。所以,表格視圖會把你要求的那一行放在最上面,然後滾動到最近的一行,這意味着視圖是「滿」的行。基本上這是因爲60並不能(完全)被17整除,所以桌面視圖不會讓你只顯示一半的'頁面'。


或者,也可以嘗試使用基於要在頂部(rectForRowAtIndexPath:)的小區的幀上的滾動視圖的方法setContentOffset:animated:

+0

我看到你說了什麼,我做了多次嘗試,並以某種方式停止在最後一頁充滿行視圖。無論如何,我可以通過我索要的索引路徑來強迫它上升嗎?我可以手動執行,因爲我已經將內容大小設置爲比實際行更多! – applefreak

+0

檢查內容大小是否真的發生了變化,因爲表格視圖'自己的內容大小可能會改變它。你可以改變表格視圖的框架,但是當你滾動時它可能看起來有點奇怪。爲什麼你想要顯示最後一頁的部分?打開尋呼幫助(我沒有在桌面視圖中試過......) – Wain

+0

是的,它實際上是在改變內容大小。我可以手動滾動以使第51個單元格最頂部,但程式化它不是這樣做的。請參閱我的tableview的附加圖像 - 最後一頁。 – applefreak