2012-04-06 77 views
3

我已經在Interface Builder中的UITableView中組成了幾個不同的自定義單元格,包括每個具有自定義高度的自定義單元格,都大於默認的44像素高度。自定義UITableViewCell高度

我然後裝載它們像這樣:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    static NSString *CellIdentifier; 

    for (int cell = 0; cell <= [tableCellsArray count]; cell++) 
    { 
     if ([indexPath row] == cell) 
     { 
      CellIdentifier = [tableCellsArray objectAtIndex:cell]; 
     } 
    } 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    // Configure the cell... 

    return cell; 
} 

它們每個都有一個自定義的類,並在上述我循環的代碼,通過該基本上保持相關聯的小區標識符的數組。然而,在運行應用程序時,所有單元格都會返回默認的44像素高度。

沒有使用委託方法返回我自己的細胞高度,有沒有我錯過了哪些可能會導致這種情況?

謝謝。

+0

爲什麼你不希望使用的委託方法? – 2012-04-06 14:51:17

+0

如果需要的話,我會盡可能少的代碼清潔劑,並在IB中設置高度,它應該在運行時保留它,所以必須有一種方法來保持高度而不壓倒我在IB中做的事情? – 2012-04-06 14:52:21

+0

我認爲你需要委託使用非自定義單元格高度。這不是那麼多的代碼,只是你必須實現的一種方法。 – 2012-04-06 14:59:45

回答

6

您可以在tableView的定義中更改所有單元格的高度,但要單獨設置它們必須使用委託方法。令人困惑的是,您可以將它設置爲IB,但僅用於顯示目的,並且不會在運行時使用。

5

您將不得不實施以下選擇器並應用正確的邏輯,以便根據您的自定義單元格類型設置正確的高度。沒有它將使用44的默認高度

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

    return YOUR_WANTED_CELL_HEIGHT; 
} 

不要以爲你錯過了別的。

0

iOS 8的和上面我們可以使用動態表視圖單元格高度

使用此功能的UITableViewCell從其內容獲取其高度和我們不需要寫heightForRowAtIndexPath

所有我在viewDidLoad中()

tableView.estimatedRowHeight = 44.0; 
tableView.rowHeight = UITableViewAutomaticDimension; 

設置做約束在細胞中:

enter image description here

結果:

enter image description here

在這裏我們可以看到:當文本的增加,細胞尺寸也得到提高自動無需編寫heightForRowAtIndexPath