2014-04-06 192 views
0

我有最多三個標籤和兩個圖像tablewView單元格。這些標籤和圖像並不總是存在。我如何根據現有的標籤和圖像設置我的細胞高度?如何創建動態tableView單元格?

這不起作用:

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

CGFloat h = kRowHeight; 
FeedCell *cell = (FeedCell *)[tableView cellForRowAtIndexPath:indexPath]; 

if (!cell.cellTextLabel) 
    h = 100.0; 
return h;** 
+0

您是否收到「Thread1:EXC_BAD_ACCESS」這樣的錯誤?當我嘗試上面的代碼時,它進入了一個循環,最終給了我那個錯誤。 – NickH

回答

0

當我使用你提供了測試代碼,它鑽進一個循環。它會將kRowHeight設置爲h,然後嘗試調用cellForRowAtIndexPath,然後重複。顯然,cellForRowAtIndexPath正在運行之前cellForRowAtIndexPath。在這個問題的最佳答案中討論Iphone - when to calculate heightForRowAtIndexPath for a tableView when each cell height is dynamic?

確定正確高度的一種方法是在其他地方檢查更改尺寸的原因。在這個共同的答案中,他們提到檢查sizeWithFont,如果你在框中有不同的字體。

對於您的情況,您可能能夠提取cellForRowAtIndexPath中確定標籤是否存在的部分,然後在您的cellForRowAtIndexPath以及heightForRowAtIndexPath中調用該部分。你提取它,所以你不會複製代碼,而只是在兩個不同的地方調用它。您可能還需要運行[self.tableView reloadData]。你甚至可能不得不打電話給[self.view setNeedsLayout](但是這個我認爲是,如果你稍後更新它,在viewWillAppear中可能不需要)。

0

docs,你要實現以下方法:

tableView:heightForRowAtIndexPath: 
+0

我更新我的問題,請檢查它 – user3486428

0

如何刪除單元格上的標籤?我問,因爲heigthForRow ...被稱爲每個細胞,所以if(!cell.label)語句永遠不會是真的,rigth?

我會添加其他自定義單元格沒有這個標籤,並設置heigthAtRow ......根據每一類細胞:

if([cell isKindOfClass [OneLabelCell class]]) {} 

我希望這是有道理的。

相關問題