2011-01-06 151 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