2012-08-03 75 views
0

我對這個方法tableView有一些滯後問題:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath。配置表格單元的動態高度

我的場景如下: 我在每個單元格中都有一些textviews,所以我需要遍歷單元格以獲取最後一個textview的yPosition及其內容大小,以便爲該特定單元格配置高度。

爲了做到這一點,我使用了UITableViewCell * cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];在heightForRowAtIndexPath方法中。因此,它會調用cellForRow並重新配置我的單元格的內容並返回給我。

但是,這是發生滯後問題的地方。由於heightForRow將在實際的cellForRow之前被調用,這意味着我將兩次調用cellForRow。一個在heightForRow中,以便獲取單元格,另一個用於實際的cellForRow實現。

請注意我需要做什麼以避免這個滯後問題。謝謝。

回答

0

你不應該自己調用表視圖委託方法。你可以告訴表視圖與此重新加載其數據:[tableview reloadData];

+0

reloadData在這種情況下沒有幫助,因爲高度尚未配置。謝謝你的回覆,真的很感謝它 – 2012-08-03 04:14:05

1

你應該在你的-tableView:heightForRowAtIndexPath:方法計算行的高度,通過調用-[NSString sizeWithFont:forWidth:lineBreakMode:]或其他一些API的一致好評,並添加任何填充的高度,以它。

然而,儘快在-tableView:heightForRowAtIndexPath:中做到這一點,與tableView.rowHeight相比,仍然存在懲罰。

+0

這個單元格內有幾個textview,所以你建議我應該從每個textview中獲取文本並將它們作爲字符串附加在一起,然後使用 - [NSString sizeWithFont:forWidth:lineBreakMode:]獲得細胞的高度?如我錯了請糾正我。謝謝。 – 2012-08-03 04:13:15

+0

如果文本沒有經常修改,您甚至可以緩存這些高度。 – ZhangChn 2012-08-06 05:41:45

+0

是的即時即時在做什麼,現在有一個數組來存儲每個單元格的所有高度。謝謝 – 2012-08-07 05:20:46