2 wojiaoweide wojiaoweide 于 2016.01.16 09:38 提问

想问下,iOS tableviewcell 高度如何跟文字内容高度一样呢?

想问下,iOS tableviewcell 高度如何跟文字内容高度一样呢? 它自己根据里面的文字或者图片自定义高度?用masonry可以不

5个回答

u014762933
u014762933   2016.01.18 17:31

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell=[self tableView:tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}

devmiao
devmiao   Ds   Rxr 2016.01.17 09:46
u014116643
u014116643   2016.01.19 10:55

计算文本高度,cell的高度返回它即可。

u014116643
u014116643 楼上那个就是方法啊。
接近 2 年之前 回复
wojiaoweide
wojiaoweide 怎样计算呢,这个是重点
接近 2 年之前 回复
wojiaoweide
wojiaoweide 怎样计算呢,这个是重点
接近 2 年之前 回复
leilba
leilba   Rxr 2016.01.21 14:58

我给你一个计算文字高度的方法

 /**
 *  计算文字显示的大小,支持单行和多行
 *
 *
 *  @param String    文字内容
 *  @param font      文字的字体
 *  @param maxWidth  文字的最大宽度
 *  @param maxHeight 文字的最大高度
 *
 *  @return 文字的显示区域,可以单单使用rect的size属性
 */
- (CGRect)getFontSizeWithString:(NSString *)String withFont:(UIFont *)font withMaxWidth:(CGFloat )maxWidth withMaxHeight:(CGFloat )maxHeight
{    
    CGRect rect = [String boundingRectWithSize:CGSizeMake(maxWidth, maxHeight) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil] context:nil];
    return rect;
}

按照你的需求的话,使用这个方法,传入文字内容、文字字体、文字显示的最大宽度、以及 MAXFLOAT
返回的结果就是你所需要的文字的范围矩形,然后获取其中的cgsize,从而得到文字的计算高度。
获取高度以后,就可以使用heightForRowAtIndexPath方法进行高度的设置,
比如:

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
 return [self getFontSizeWithString:@"hello" withFont:[UIFont systemFontOfSize:12] withMaxWidth:SCREEN_WIDTH  withMaxHeight:MAXFLOAT].size.height;
}

我是这样做的,你可以试一下

Margaret_MO
Margaret_MO   2016.03.03 15:10

/**

  • 自适应文字高度 *
  • @param text 要适应label的文本内容
  • @param font 当前文本的字体
  • @param width label固定的宽度 *
  • @return 自适应之后label的高度
    */
    +(CGFloat)heightWithText:(NSString *)text font:(UIFont *)font width:(CGFloat)width {
    //第一步:设置文本显示的范围
    //如果计算label的自适应高度,那么宽度需要固定,宽度需要尽量设置大值
    CGSize size = CGSizeMake(width, MAXFLOAT);

    //第二步:设置要显示的文本样式
    NSDictionary *style = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];

    //第三步:根据文本内容和文本样式计算label的frame
    /**

    • 参数说明: 1.文本的显示范围 2.文本显示规则 3.字体文本样式(通常只包括字体大小) 4.通常nil */ CGRect result = [text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:style context:nil];

    //返回自适应之后的高度
    return result.size.height;
    }

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!