0

当我创建自己的元素时,UITableViewCell我使用它layoutSubviews来排列单元格中的元素。但是,如何创建一个适合所需行数的区域 - 取决于描述文本的长度。

-(void) layoutSubviews {
    [super layoutSubviews];

    [imageView setFrame:CGRectMake(8.0, 10.0, 20.0, 20.0)];
    [description setFrame:CGRectMake(40.0, 1.0, 250.0, 40.0)]; //1..n lines  <- ???????

}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        imageView = [[UIImageView alloc] initWithFrame: CGRectZero];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        [self.contentView addSubview: imageView];

        titleLabel = [[UILabel alloc] initWithFrame: CGRectZero];
        [titleLabel setFont:[UIFont systemFontOfSize:14.0]];
        [titleLabel setTextColor:[UIColor blackColor]];
        [titleLabel setHighlightedTextColor:[UIColor darkGrayColor]];
        [titleLabel setLineBreakMode: NSLineBreakByWordWrapping];
        //titleLabel.numberOfLines = 2;
        [self.contentView addSubview: titleLabel];

        description = [[UILabel alloc] initWithFrame: CGRectZero];
        [description setFont:[UIFont systemFontOfSize:12.0]];
        [description setTextColor:[UIColor darkGrayColor]];
        [description setHighlightedTextColor:[UIColor darkGrayColor]];
        [description setLineBreakMode: NSLineBreakByWordWrapping];
        //description.numberOfLines = 1;                     //1..n lines  <- ???????
        [self.contentView addSubview: description];
}
4

2 回答 2

1

您必须通过计算要将其放置在单元格中的字符串(单元格内容)的大小来获取单元格的高度。这个计算应该在:

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

计算高度后,您必须相应地调整/放置单元格内的元素框架(单元格内容)。

于 2013-03-13T13:39:31.670 回答
1

表格单元格不能确定它自己的高度。取而代之的是 UITableView 布置单元格。现在,UITableView确实有一个委托方法:- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath. 但是,它会在表显示其数据之前为表中的每一行调用该方法(或称为cellForRowAtIndexPath委托方法)。这是因为UITableView需要知道表格在开始显示数据之前有多大(或多高),因为它使用此信息来设置 contentSize、确定滚动条高度等。这意味着,如果您想要具有变量的表格单元格单元格高度,您需要在表格加载之前计算这些单元格高度。如果表格很小,那么这没有问题,但如果您的表格很大或计算复杂,则可能会延迟显示您的表格。出于这个原因,您通常希望heightForRowAtIndexPath非常高效。

但是一旦你完成了这个(计算了行高),你不需要在你的UITableViewCell子类中做任何事情,除了布局你的子视图。单元格高度已经为您设置好了。

于 2013-03-13T13:40:22.093 回答