2012-04-06 57 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