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

发布于 2024-11-18 10:00:35 字数 2894 浏览 2 评论 0原文

我有一个包含 3 个 UILabels 的自定义单元格。最后一个标签将包含嵌入 \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

I've got a custom cell that contains 3 UILabels. The last label will contain text that has embedded \n's so that the data in that cell is listed one item per line. I know the number of lines needed and I know that each line needs to be 15 pixels high. The code I've got to change the size of this label is here:

//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 contains the text with the \n's and nAdditionalLabelHeight contains the number of lines. I've set the background color to grey so that I can see if the label is correctly sized and it doesn't change it's height. Can anyone see what I'm doing wrong?

Here's the code for the custom cell .h file in case that may help:

@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

And here's the code for the custom cell .m file in case that may help:

#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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

合久必婚 2024-11-25 10:00:35

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

I figured out a way to handle this. I basically override the initWithStyle and passed in the nAdditionalLabelHeight variable and then used this to set the height of the label.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文