自定义单元格中的 UILabel 不会动态增加高度

Posted

技术标签:

【中文标题】自定义单元格中的 UILabel 不会动态增加高度【英文标题】:UILabel in custom cell will not increase height dynamically 【发布时间】:2011-07-02 03:16:18 【问题描述】:

我有一个包含 3 个 UILabel 的自定义单元格。最后一个标签将包含嵌入 \n 的文本,以便该单元格中的数据每行列出一项。我知道所需的行数,并且我知道每行需要 15 像素高。我必须更改此标签大小的代码在这里:

//Set up the cell
static NSString *CellIdentifier = @"Cell";
CustomHistoryCell *cell = (CustomHistoryCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
    cell = [[[CustomHistoryCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

cell.probeInfo.lineBreakMode = UILineBreakModeWordWrap;
cell.probeInfo.numberOfLines = 0;
cell.probeInfo.text = theProbes;
[cell.probeInfo setAdjustsFontSizeToFitWidth:YES];
CGRect newFrame = cell.probeInfo.frame;
newFrame.size.height = nAdditionalLabelHeight*15;
cell.probeInfo.frame = newFrame;

theProbes 包含带有 \n 的文本,nAdditionalLabelHeight 包含行数。我已将背景颜色设置为灰色,以便我可以查看标签的大小是否正确并且不会改变它的高度。谁能看到我做错了什么?

以下是自定义单元格 .h 文件的代码,以防万一:

@interface CustomHistoryCell : UITableViewCell 
    UILabel *_stokerName;
    UILabel *_smokeDateTime;
    UILabel *_probeInfo;


@property (nonatomic,retain) UILabel *stokerName;
@property (nonatomic,retain) UILabel *smokeDateTime;
@property (nonatomic,retain) UILabel *probeInfo;

@end

这是自定义单元格 .m 文件的代码,以防万一:

#import "CustomHistoryCell.h"


@implementation CustomHistoryCell

@synthesize stokerName = _stokerName;
@synthesize smokeDateTime = _smokeDateTime;
@synthesize probeInfo = _probeInfo;

- (id)initWithStyle:(UITableViewCellStyle)style
    reuseIdentifier:(NSString *)reuseIdentifier

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])
    
        // Initialization code
        self.stokerName = [[UILabel alloc]init];
        self.stokerName.textAlignment = UITextAlignmentLeft;
        self.stokerName.font = [UIFont boldSystemFontOfSize:20];
        self.smokeDateTime = [[UILabel alloc]init];
        self.smokeDateTime.textAlignment = UITextAlignmentLeft;
        self.smokeDateTime.font = [UIFont systemFontOfSize:12];
        self.probeInfo = [[UILabel alloc]init];
        self.probeInfo.textAlignment = UITextAlignmentLeft;
        self.probeInfo.font = [UIFont systemFontOfSize:12];
        self.probeInfo.backgroundColor = [UIColor grayColor];
        [self.contentView addSubview:self.stokerName];
        [self.contentView addSubview:self.smokeDateTime];
        [self.contentView addSubview:self.probeInfo];
    


    return self;


- (void)layoutSubviews 
    [super layoutSubviews];
    CGRect contentRect = self.contentView.bounds;
    CGFloat boundsX = contentRect.origin.x;
    CGRect frame;
    frame= CGRectMake(boundsX+5,5, 300, 25);
    self.stokerName.frame = frame;
    frame= CGRectMake(boundsX+5,30, 300, 15);
    self.smokeDateTime.frame = frame;
    frame= CGRectMake(boundsX+5,45, 300, 15);
    self.probeInfo.frame = frame;


- (void)dealloc

    [super dealloc];


@end

【问题讨论】:

我删除了昨天留下的答案,希望您能获得更好(即正确)的答案。我唯一能想到的另一件事是setAdjustsFontSizeToFitWidth: 仅在numberOfLines = 1 时才有效,但即便如此我也不确定为什么或如何影响 UILabel 的帧大小。 【参考方案1】:

我想出了一个办法来解决这个问题。我基本上覆盖了 initWithStyle 并传入了 nAdditionalLabelHeight 变量,然后用它来设置标签的高度。

【讨论】:

以上是关于自定义单元格中的 UILabel 不会动态增加高度的主要内容,如果未能解决你的问题,请参考以下文章

UITableView - 由单元格本身控制的动态单元格高度

IOS - UIView中使用AutoLayout的UILabel动态高度

如何使用自定义表格视图单元格中识别的点击手势从 UILabel 呈现视图控制器?

动态增加 UILabel & TableView Cell 的高度?

具有多行 UILabel 的自定义 Tableview 单元格需要动态高度

如何根据自定义单元格内的 UILabel 设置单元格高度