對不起 - 沒有內置的方法來反轉這些方法或任何類似的東西。其中一個原因是,表格視圖可能想知道行的高度,原因很多,但並非所有這些都包括顯示單元格 - -tableView:heightForRowAtIndexPath:
可能會多次調用,或者-tableView:cellForRowAtIndexPath:
可能根本不會被調用調用height方法。
什麼你可以做的是找到另一種方式來計算提前適當的高度,它緩存,並依靠-tableView:heightForRowAtIndexPath:
緩存的價值。我已經設法通過構建一個「虛擬」UITableViewCell實例來做類似的事情,將它保留在正常重用隊列之外,並將其用於佈局和高度確定目的。這樣的解決方案將如下所示:
- 獲取
-tableView:heightForRowAtIndexPath:
。
- 在高度緩存中查找索引路徑。如果您有價值,請將其退回。
- 否則,使用您的虛擬單元佈局將出現在該索引路徑的內容。測量單元格的高度並緩存它。
- 多次重複步驟1-3,具體取決於調用多少
-tableView:heightForRowAtIndexPath:
。
- 獲取
-tableView:cellForRowAtIndexPath:
。
- 從正常重用隊列中取出一個單元格,填充它,佈局並返回。 (您可以選擇驗證其高度是否與預先計算的高度相匹配,以便表格視圖具有您期望的行爲)。
根據您的單元格的內容和短語的複雜性,「佈置它「在您的使用案例中,當您計算前幾個高度時,或者在用戶快速滾動您的表格視圖時,這可能會導致合理的性能下降。但是,隨着緩存的升溫,應用程序繼續運行時,您應該計算越來越少的高度。最後一點:請記住,對於默認高度(可能不會出現在表格中)的單元格,您可以通過返回tableView.rowHeight
來提前退出,而不是每次出現時計算默認高度。這可以稍微緩解上述方法的計算負擔。
來源
2013-01-17 23:16:42
Tim
要麼你必須計算'viewDidLoad'中的高度,並將其添加到數組中,並使用它或在'heightForRowAtIndexPath'方法中執行計算。你不能逆轉訂單。 – iDev
無論你在cellForRowAtIndexPath中做什麼計算來獲取高度,爲什麼你不能在heightForRowAtIndexPath中做同樣的計算? –
@ACB是正確的(像往常一樣!)。你必須這樣做。您需要重新考慮如何或何時計算行高 - 它應該基於您的模型,在開始描述表視圖之前應該知道這個模型。 _爲什麼你不能按照正常的順序去做? – jrturton