通过注册nib添加的表视图单元格的高度为0。

时间:2014-08-01 19:21:35

标签: objective-c uitableview frame

我有一个自定义UITableViewCell内置在一个单独的xib文件中,我通过调用动态地将它添加到我的表视图中:

[self.tableview registerNib:theNib forCellReuseIdentifier:theIdentifier];

我在[tableView:heightForRowAtIndexPath:]中返回了这样的高度:

return ((UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:theIdentifier]).frame.size.height;

问题是,每次高回报都是0.

无论如何都要正确地返回高度(应该是xib文件中单元格的高度)除了硬编码吗?

1 个答案:

答案 0 :(得分:0)

事情是dequeueReusableCellWithIdentifier:方法试图从现有的单元格中获取单元格(如果有的话)。但是因为第一次调用此方法时,没有创建单元格,它可能会返回nil,而height的结果将为0。

此方法的所有其他调用将尝试使用退出的单元格高度,但也将始终为0。

尝试做这样的事情:

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:theIdentifier];

if (!cell) {
  NSArray *nib = [[NSBundle mainBundle] loadNibNamed:nibForCellName owner:self option:nil];

  for (id obj in nib) {
    if ([obj isKindOfClass:[UITableViewCell class]]) {
      cell = (UITableViewCell *) obj;
      break; 
    }
  }
}

return cell.frame.size.height;