自定义 UITableViewCell 的高度

Posted

技术标签:

【中文标题】自定义 UITableViewCell 的高度【英文标题】:Customizing UITableViewCell's height 【发布时间】:2012-10-29 14:25:54 【问题描述】:

如何根据其中的内容量缩放 UITableViewCells?在我的单元格中,我使用了 3 个代表论坛的标签。这些标签被命名为“alias”、“date”和“cmets”。第三个标签 cmets,可以是任意数量的大小。因此,我的单元格需要根据“cmets”标签的大小动态变化。以下是我的相关代码:

- (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 设置了 cmetsLabel 的高度。但是从现在开始我该怎么办?如果我知道标签的高度,如何根据commentLabel 的高度设置单元格的高度?请根据我的代码给出代码示例。我想我应该使用以下方法,但我不知道该怎么做:

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



【问题讨论】:

【参考方案1】:

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

-(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 天的工作我,你是英雄! 您好,我发现了定制单元格的一个新问题,由于我使用的是您的代码,我想看看您是否对此有所了解?这是链接:***.com/questions/13223682/… /Regards【参考方案2】:

你可以在你的实现中声明标签:

@implementation pTableView

    UILabel *aliasLabel;

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

return 44 + aliasLabel.frame.size.height;

那么如果您需要区分表格中的标签

aliasLabel.tag = indexpath.row

【讨论】:

以上是关于自定义 UITableViewCell 的高度的主要内容,如果未能解决你的问题,请参考以下文章

动态计算自定义 UITableViewCell 的高度

UITableViewCell 自定义类 - 更改子视图高度约束后重新加载单元格高度

根据视图更改自定义 UITableViewCell 高度

在 UITableView 中定义高度的自定义 UITableViewCell

如何在自定义 UITableViewCell 中增加 Label 的高度

自定义 UITableViewCell 的动态高度问题