设置动态UITableViewCell高度

时间:2011-01-06 14:24:23

标签: ios objective-c uitableview cocoa-touch height

我有一个带有两个动态行的UITableView。每个行都是UITableViewCell的子类,并从nib加载。由于我的行包含动态内容,因此我使用layoutSubviews重新定位所有子视图:

- (void)layoutSubviews
{
 [super layoutSubviews];

 CGFloat initialHeight = titleLabel.bounds.size.height;
 CGSize constraintSize = CGSizeMake(titleLabel.bounds.size.width, MAXFLOAT);
 CGSize size = [titleLabel.text sizeWithFont:titleLabel.font constrainedToSize:constraintSize];
 CGFloat delta = size.height - initialHeight;

 CGRect titleFrame = titleLabel.frame;
 titleFrame.size.height += delta;
 titleLabel.frame = titleFrame;

 locationLabel.frame = CGRectOffset(locationLabel.frame, 0, delta); 
 dayLabel.frame = CGRectOffset(dayLabel.frame, 0, delta);
 timeLabel.frame = CGRectOffset(timeLabel.frame, 0, delta);
}

问题是我无法找到一种方法来确定表视图中的高度委托的tableView:heightForRowAtIndexPath:方法。

诀窍是我从nib加载单元格,所以刚加载后它的titleLabel.bounds.size.width是300 px(如nib),不考虑设备类型(iPhone / iPad)和当前方向,因此,如果没有对方向和设备类型进行条件检查,似乎无法计算高度。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的layoutSubviews没有调整单元格的大小,因此以下内容应该有效:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return cell.frame.size.height;
}

如果由于内容更改而需要调整单元格的大小,则可以在self.frame = newFrame内设置layoutSubviews

您也可以通过拨打layoutSubviews来手动调用setNeedsLayout