2013-04-05 51 views
1

我調整了自定義類中自定義UITableViewCell的高度,我相信我需要使用-tableView:cellForRowAtIndexPath:方法來調整單元格的高度。我試圖剛剛調整的自定義單元格類的自定義單元格的高度,然後抓住電池在給定的索引路徑投它,並返回該小區的這樣的高度:從-tableView:cellForRowAtIndexPath:「indexPath」計算自定義UITableViewCell高度?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    CustomUITableViewCell *cell = (CustomUITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; 

    return cell.frame.size.height; 
} 

但我獲得堆棧溢出。這樣做有什麼更好的方法?

回答

0

如果是故事板單元格,則可以撥打dequeueReusableCellWithIdentifier:。否則,您可以直接使用[CustomUITableViewCell alloc] initWithFrame:]之類的東西來實例化單元。

我自己使用這種方法(使用原型單元計算高度),因爲它允許我們的設計人員在不需要更改代碼的情況下修改故事板單元。

您可能需要根據高度是靜態還是動態來調整您的方法,如here所述。

+0

我要說@芒迪的建議是更好/更簡單,除非(一)要修改單元格高度情節板中不更改代碼或(b)你的需要計算其高度/佈局,你不不想在視圖控制器中複製該邏輯。 – 2013-04-06 22:15:16

2

表格視圖delegate將首先調用heightForRowAtIndexPath:,然後datasource將基於所計算的信息構造cellForRowAtIndexPath:之後的單元格。

因此,您的方法將無法正常工作。

你需要有一些計算高度的邏輯。 (例如,如果您正在顯示文本的高度可能是動態的,並取決於文本的數量 - 您可以使用NSString方法計算。)

如果您只是顯示幾種具有固定高度的單元格,則只需定義這些高度作爲常量並根據您在cellForRowAtIndexPath:中所用的相同邏輯返回正確的高度,以決定使用哪個單元格。

#define kBasicCellHeight 50 
#define kAdvancedCellHeight 100 

- (CGFloat)tableView:(UITableView *)tableView 
     heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (needToUseBasicCellAtThisIndexPath) { 
     return kBasicCellHeight; 
    } 
    return kAdvancedCellHeight;   
} 
相關問題