2012-05-11 55 views
2

總體思路高效調整的UITableViewCell上滾動

進出口尋找動態調整UITableViewCells當用戶滾動列表,也就是說,使項目生長在大小,因爲他們到達列表的底部。

考慮

這是一個需要爲呼叫來作出刷新每秒多次的過程:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 

所以這是不切實際的採取UITableView::ReloadData的方法,使一呼叫:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

由於這將需要重新加載一堆額外的數據和sl很大程度上依靠系統。

需要

  • 我將在屏幕上的約10項。
  • 整個列表在極端情況下可能有多達100個項目。
  • 系統需要平滑滾動。
  • 當列表滾動時,項目需要實時擴展和收縮。

常識

  • 這必然會有一定的性能影響VS靜態項的列表。

  • 有數百個線程處理「resize cel to text length」這個簡單的情況,這不是我所需要的,因爲這是一次性的事情,相比之下,每秒有很多次循環。

可能的方法

  • 子類UITableView
  • 有一個嵌套在UIScrollView中的靜態UITableView
  • 從零開始創建項目列表系統,根本不使用UIScrollView

廢棄接近每個週期

  • 呼叫UITableView::ReloadData使heightForRowAtIndexPath:被調用。

到目前爲止

我已經編碼的計算項目大小的數學模塊。

結論

我在尋找最快捷的方式來解決這一點,但如果需要,作爲最後的手段,我將重新編寫自己UITableView

謝謝你的時間。

+0

@jacky男孩,感謝您的編輯和觀察。我刪除了一些從未得到答案的問題,並在我找到的一些解決方案中加以鍵入。我的大部分問題現在都回答了,除了我想弄明白的兩個問題。 –

回答

1

提到的重測試後與UITableView我還沒有找到一種方法來有效地做到這一點。看來UITableView可能會以不允許動態調整大小的方式進行優化。出於這個原因,制定自定義列表系統似乎是唯一的選擇。我已經開始在UIScrollView之上建設這樣的項目。

基本功能的很大一部分已經完成,但項目目前暫停,因爲我有一個更重要的系統開發到目前爲止。如果你有興趣參與這個項目,請告訴我。

0

也許在uitableview委託數據表中檢出tableView:willDisplayCell:forRowAtIndexPath。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html

我有我需要先加載表格單元格,然後做一些事情來每個小區不同的桌子上裝載或重裝後,可能是你在找什麼類似的問題。

乾杯

+0

不,問題是您需要調用UITableView :: ReloadData來更改單元格大小。由於我調用Scroll函數調整所有單元格的大小,因此每秒調用UITableView :: ReloadData函數將會產生大量性能。 –

+0

哦,我明白了,是的,那不是最好的解決方案。祝你好運! – onetwopunch

0

你不需要調用 - [UITableView的reloadData]更新細胞的幾何形狀。你可能會導致一個UITableView通過調用重新計算細胞的幾何形狀:

// force geometry update 
[tableView beginUpdates]; 
[tableView endUpdates]; 

這是在WWDC 2010 talk - Mastering Tableviews

+0

雖然這確實起作用,但是從我測試過的情況來看,如果您在' - (void)scrollViewDidScroll'中調用它,它仍然運行得非常慢,以便在用戶滾動時實時調整動態大小。你有沒有設法做到這一點沒有一個大的性能擊中@布萊恩? –