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

时间:2014-07-21 13:50:41

标签: ios objective-c uitableview ios7

我使用UITableView来显示数据库中的项目,并创建了自定义UITableViewCell,其中包含一些标签。我最大的标签是名称描述 每个单元格可以有不同的高度,但我无法弄清楚如何设置动态单元格高度 我得到的只是标签末端的三个点,单元格的高度总是大约为50 如何根据里面的标签制作单元格高度?

#define FONT_SIZE 14.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 10.0f

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

    NSString *text = _orderProperty.Description;

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE]
                   constrainedToSize:constraint
                       lineBreakMode:NSLineBreakByWordWrapping];

    CGFloat height = MAX(size.height, 44.0f);

    return height + (CELL_CONTENT_MARGIN * 2);
}

更新

static NSString *CellIdentifier = @"orderDetailCell";

    OrderDetailCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil){
        [tableView registerNib:[UINib nibWithNibName:@"OrderDetailCustomCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    }

    OrderProperty* item = [_list objectAtIndex:indexPath.row];

    cell.Title.text =  item.Title;

    NSString* _description = item.Description;

    cell.Description.text = _description;

3 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    int rowHeight =0.0f;
    NSString *stringToSize=[NSString stringWithFormat:@"%@",longStringValue];
    CGSize size = [stringToSize
                   sizeWithFont:[UIFont systemFontOfSize:15.0f]
                   constrainedToSize:CGSizeMake(300, 6000)
                   lineBreakMode:NSLineBreakByWordWrapping];
    rowHeight = size.height+10;
    return rowHeight;
}

你可以从你用作表的dataSource的数组中获取longStringValue

答案 1 :(得分:0)

sizeWithFont现已弃用,请使用以下方法根据标签内的文字设置销售高度。

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

   OrderProperty* item = [_list objectAtIndex:indexPath.row]; 

    NSString *text = item.Description;

    NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:[UIFont fontWithName:@"Helvetica" size:13] forKey:NSFontAttributeName];

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

    CGSize expectedLabelSize = [content boundingRectWithSize: constraint options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:stringAttributes context:nil].size;

    return expectedLabelSize.height+CELL_CONTENT_MARGIN * 2);
}

显然,您需要将字符串属性调整为您正在使用的任何内容。这些仅用于计算细胞所需的高度。

答案 2 :(得分:0)

您可以在NSString上使用以下类别,该类别使用NSTextContainerNSTextContainer来计算文字的完全大小。

NSString+Calculation.m

你的最终代码将是这样的:

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

    NSString *text = _orderProperty.Description;

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

    CGSize size = [text usedSizeForMaxWidth:constraint.width 
                                   withFont:[UIFont systemFontOfSize:FONT_SIZE]];

    CGFloat height = MAX(size.height, 44.0f);

    return height + (CELL_CONTENT_MARGIN * 2);
}