我有一个带有两个动态行的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)和当前方向,因此,如果没有对方向和设备类型进行条件检查,似乎无法计算高度。有什么想法吗?
答案 0 :(得分:0)
您的layoutSubviews
没有调整单元格的大小,因此以下内容应该有效:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return cell.frame.size.height;
}
如果由于内容更改而需要调整单元格的大小,则可以在self.frame = newFrame
内设置layoutSubviews
。
您也可以通过拨打layoutSubviews
来手动调用setNeedsLayout
。