heightForRowAtIndexPath设置错误行的高度

时间:2014-05-17 08:59:45

标签: ios objective-c uitableview

我对heightForRowAtIndexPath函数有一个奇怪的问题。 我需要第三行的高度更高,但它总是为下一行(在本例中为4)行设置高度。

我会解释:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  int height = 40;
  if(indexPath.row == 3) height = 120;
  NSLog(@"cell %i [height = %i]", indexPath.row, height);
  return height;
}

记录下来:(似乎很好)

       cell 0 [height = 40]
       cell 1 [height = 40]
       cell 2 [height = 40]
       cell 3 [height = 120]
       cell 4 [height = 40]
       cell 5 [height = 40]
       ...

它看起来像这样: heightForRowAtIndexPath wrong height

**(要清楚:灰色行不是一个部分,而是一个不同的单元格样式。)

我错过了什么或者我做错了什么? 谢谢!

根据要求,我添加了cellForRowAtIndexPath代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *cellIdentifier = @"FrontendCell";
  int cellType = [[self.cellTypes objectAtIndex:indexPath.row] integerValue];
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

  switch (cellType) {
    case FRONTEND_CELL_TYPE_DETAIL:{
        cell = [[FrontendDetailTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        cell.title.text = [self.titles objectAtIndex:indexPath.row];
        cell.description.text = [self.descriptions objectAtIndex:indexPath.row];
        cell.price.text = [self.details objectAtIndex:indexPath.row];
        cell.price.text = [self.details objectAtIndex:indexPath.row];
    }break;
}

3 个答案:

答案 0 :(得分:1)

也许,一切正常,但没有像我们期望的那样呈现。

我的意思是第3行的高度设置为120,但它的设计被移动,所以看起来下一个单元格的高度为120。请尝试选择那些单元格,也许选择背景将提供信息。还尝试使用单元格设计来阐明

答案 1 :(得分:0)

我对可能出现问题的地方有一个大概的了解。我相信定制细胞和正常细胞之间存在混淆。由于您有2种不同类型的Cell,在 cellForRowAtIndexPath 中,您应该执行类似

的操作
- (UITableViewCell *)tableView:(UITableView *)tableView 
          cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * cellIdentifier1 = @"FrontendCell";
    static NSString * cellIdentifier2 = @"NotFrontendCell";

    if(indexPath.row==1){
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1];
    }
    else{
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier2];
    }

  //Other code

}

确保故事板上有 NotFrontendCell 的其他自定义单元格。

答案 2 :(得分:0)

提供self.cellTypes及其实现的列表。 你可能错了。