2009-09-21 81 views

回答

5

您只需使用表格視圖來控制高度。您可以通過使用調用remove來重新添加特定的單元格來告訴表單元已更改,因此不必重新加載整個表格 - 但必須使用委託回調函數tableView:heightForRow獲取高度: atIndexPath:

我不明白爲什麼這是不實際的。您可以運行任意數量的異步系統,以更新由表視圖委託所保存的中央高度緩存 - 每次創建單元時,都可以將其分配給委託作爲參考,因此可以與桌面進行對話並讓其返回它知道細胞需要重新裝載以及新的高度是多少。

如果你考慮一下,窮人的表格視圖是一個滾動視圖,它必須管理所有這些單獨的單元格並將它們保持在一個可視化的狀態 - 所以它真的沒有惡意的單元變得流氓並開始修改框架而不讓表格無論如何,都知道發生了什麼。最好讓桌子開着,告訴它該做什麼。

+0

是的,如果你調用[tableView reloadData],它會調用委託方法'tableView:heightForRow:atIndexPath:',你有機會根據你的數據計算出合適的單元高度。請記住,如果您的電池非常高或者其中有很多電池,則在滾動性能方面可能會很昂貴。 – runmad 2010-11-03 12:01:54

+0

這就是爲什麼高度緩存部分非常重要,所以你不必做很多工作來告訴系統高度是多少。 – 2010-11-03 16:09:24

+1

按照加拿大開發者的建議,您不需要調用[tableView reloadData]。相反,你可以調用[tableView beginUpdates]; [tableView endUpdates];這將導致tableView重新測量每個單元格(爲每個單元格調用heightForForRow:atIndexPath:),而無需重新加載每個單元格。 – TomSwift 2010-11-07 20:42:01

0
+0

我在contentView中添加視圖。我正在調整'self.frame'而不是'self.contentView.frame',因爲contentView會使用autoResizingMask自動調整大小。 無論哪種方式,設置'self.view'或'self.contentView'的框架都不能解決問題。如果你在單元格內調整它的大小,tableView仍然是超級混淆。 – 2009-09-21 17:40:50

1

不,您不能使用UITableViewDelegate來設置單元格的大小。實際更改單元格的大小來更改單元格的大小,但不會更改UITableView用於繪製單元格的偏移量。這將導致重疊,並在整個地方的差距。

您的朋友是tableView:heightForRowAtIndexPath:,它應該是快速。如果覆蓋它,那麼表視圖就不能再假定所有行都具有相同的高度。因此每次獲取要繪製的單元格時,它必須查詢所有的行的高度。

相關問題