2011-01-06 248 views
2

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

- (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)和当前方向,所以看起来不可能在没有对定向和设备类型进行有条件检查的情况下计算高度。有任何想法吗?

+0

先接受一些答案。 – mvds 2011-01-06 14:28:21

+0

你完全可以不说话。任何问题? – HiveHicks 2011-01-06 14:40:56

回答

0

layoutSubviews不调整单元格,所以下面应该工作:

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

如果电池需要调整大小,由于内容改变,那么你可以设置self.frame = newFramelayoutSubviews

您也可以通过调用setNeedsLayout来调用layoutSubviews