自定义UITableViewCell高度

时间:2012-10-29 14:25:55

标签: ios uitableview

如何根据UITableViewCells中的内容量来扩展它们?在我的单元格中,我使用3个代表论坛的标签。标签名为“别名”,“日期”和“评论”。第三个标签注释,可以是任意数量的大小。因此,我的单元格需要动态变化,具体取决于“注释”标签的大小。以下是我的相关代码:

- (UITableViewCell *)tableView:(UITableView *)pTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ForumthreadCell";
UITableViewCell *cell = [pTableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

Feedback *item = [self.items objectAtIndex:indexPath.row];

UILabel *aliasLabel = (UILabel *)[cell viewWithTag:1];
UILabel *commentLabel = (UILabel *)[cell viewWithTag:2];
UILabel *dateLabel = (UILabel *)[cell viewWithTag:3];

[aliasLabel setText:item.alias];
[commentLabel setText:item.comment];
[dateLabel setText:[self.dateFormatter stringFromDate:[NSDate    dateWithTimeIntervalSince1970:(double)item.time]]];

commentLabel.numberOfLines = 0;
[commentLabel sizeToFit];

CGSize textHeight = [commentLabel.text sizeWithFont:commentLabel.font  constrainedToSize:CGSizeMake(maxWidth, lineHeight *    commentLabel.numberOfLines)lineBreakMode:UILineBreakModeWordWrap];

return cell;
}

如您所见,我使用textHeight设置commentsLabel的高度。但是从现在开始我该怎么办?如果我知道标签的高度,我如何根据commentLabel的高度设置Cell的高度?请根据我的代码提供代码示例。我想我应该使用以下方法,但我不知道该怎么做:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

}

2 个答案:

答案 0 :(得分:6)

使用此方法获取文本的文本高度

-(CGFloat)getLabelHeightForText:(NSString *)text andWidth:(CGFloat)labelWidth
{

CGSize maximumSize = CGSizeMake(labelWidth, 10000);

//provide appropriate font and font size
CGSize labelHeighSize = [text sizeWithFont: [UIFont fontWithName:@"Trebuchet MS" size:13.0f]
                         constrainedToSize:maximumSize
                             lineBreakMode:UILineBreakModeTailTruncation];
return labelHeighSize.height;
}

此方法将返回您传递的文本的高度。在您的课程中添加此方法。并使用 tableView:heightForRowAtIndexPath:委托方法设置每个单元格的高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   Feedback *item = [self.items objectAtIndex:indexPath.row];

   CGFloat textHeight = [self getLabelHeightForText:item.comment andWidth:162];//give your label width here
    return textHeight;
}    

我认为这可以解决问题。

答案 1 :(得分:0)

您可以在实现中进行Label声明:

@implementation pTableView
{
    UILabel *aliasLabel;
}

然后在行高中你可以使用默认高度(44)+ aliasLabel.Height

return 44 + aliasLabel.frame.size.height;

然后,如果您需要区分表格中的标签

aliasLabel.tag = indexpath.row