我有一个包含动态单元格的表。在每个单元格中,我有textLabel和detailTextLabel。我想将单元格高度设置为等于textLabel和detailTextLabel的高度之和。这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.textLabel.numberOfLines = 0;
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.detailTextLabel.numberOfLines = 0;
cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.text=text;
cell.detailTextLabel.text=detailText;
return cell;
}
我该怎么做?
答案 0 :(得分:3)
如果你在iOS8上使用AutoLayout,一个重要的部分就是告诉UITableView"自动覆盖":
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 50.0; // your estimated average cell height
此外,最好使用自定义单元格并覆盖方法" layoutSubviews":
- (void)layoutSubviews
{
[super layoutSubviews];
// Make sure the contentView does a layout pass here so that its subviews have their frames set, which we
// need to use to set the preferredMaxLayoutWidth below.
[self.contentView setNeedsLayout];
[self.contentView layoutIfNeeded];
self.details.preferredMaxLayoutWidth = CGRectGetWidth(self.details.frame);
}
在github上查看此Example Project。
答案 1 :(得分:0)
以下代码为UILabel的动态高度。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if ( [detailText length] <= 0 ){
CGSize constraint = CGSizeMake(450, 40000.0f);
CGSize size = [detailText sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14] constrainedToSize:constraint lineBreakMode:UILineBreakModeCharacterWrap];
size.height = MAX(size.height,36);
return 50+size.height;
}
return 150;
}
这有助于解决您的问题。