动态计算UITableViewCell高度<进阶>

@property (nonatomic, strong) UITableViewCell *prototypeCell;

//注册Nib
UINib *cellNib = [UINib nibWithNibName:@"NLGC" bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"NLGC"];
self.prototypeCell  = [self.tableView dequeueReusableCellWithIdentifier:@"NLGC"];

//CellForIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NLGC *cell = [self.tableView dequeueReusableCellWithIdentifier:@"NLGC"];
    cell.t.text = [self.tableData objectAtIndex:indexPath.row];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NLGC *cell = (NLGC *)self.prototypeCell;
    cell.t.text = [self.tableData objectAtIndex:indexPath.row];
    CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    NSLog(@"h=%f", size.height + 1);
    return 1  + size.height;
}

  若文本控件是textView则要运用到sizeToFit

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NLGC *cell = (NLGC*)self.prototypeCell; cell.t.text = [self.tableData objectAtIndex:indexPath.row]; CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; CGSize textViewSize = [cell.t sizeThatFits:CGSizeMake(cell.t.frame.size.width, FLT_MAX)]; CGFloat h = size.height + textViewSize.height; h = h > 89 ? h : 89; //89是图片显示的最低高度, 见xib NSLog(@"h=%f", h); return 1 + h; }

Manual Layout

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    C3 *cell = [self.tableView dequeueReusableCellWithIdentifier:@"C3"];
    cell.t.text = [self.tableData objectAtIndex:indexPath.row];
    [cell.t sizeToFit];
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    C3 *cell = (C3 *)self.prototypeCell;
    NSString *str = [self.tableData objectAtIndex:indexPath.row];
    cell.t.text = str;
    CGSize s = [str calculateSize:CGSizeMake(cell.t.frame.size.width, FLT_MAX) font:cell.t.font];
    CGFloat defaultHeight = cell.contentView.frame.size.height;
    CGFloat height = s.height > defaultHeight ? s.height : defaultHeight;
    NSLog(@"h=%f", height);
    return 1  + height;
}

- (CGSize)calculateSize:(CGSize)size font:(UIFont *)font
{
    CGSize expectedLabelSize = CGSizeZero;

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
        NSDictionary *attributes = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraphStyle.copy};

        expectedLabelSize = [self boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
    }
    else {
        expectedLabelSize = [self sizeWithFont:font
                                       constrainedToSize:size
                                           lineBreakMode:NSLineBreakByWordWrapping];
    }

    return CGSizeMake(ceil(expectedLabelSize.width), ceil(expectedLabelSize.height));
}

  

时间: 2024-10-07 07:07:44

动态计算UITableViewCell高度<进阶>的相关文章

转:动态计算UITableViewCell高度详解

转自:http://www.cocoachina.com/industry/20140604/8668.html 不知道大家有没有发现,在iOS APP开发过程中,UITableView是我们显示内容常见的控件,本人觉得它是UIKit中最复杂的一个控件.今天要向大家介绍的就是如何动态计算UITableViewCell高度的一经验与技巧,在此做一些总结方便朋友们查阅.为了不让讲解空洞抽象,我还是用代码实例的方式进行讲解,这样更容易接收与学习. 本文将介绍四种情况下UITableViewCell的计

动态计算UITableViewCell高度详解 (转)

感觉挺有用的一篇文章,分析了4种解决方案.回头测试之.如果有别的方案,我会在后面补上. 原文地址:http://www.ifun.cc/blog/2014/02/21/dong-tai-ji-suan-uitableviewcellgao-du-xiang-jie/ 不知道大家有没有发现,在iOS APP开发过程中,UITableView是我们显示内容常见的控件,本人觉得它是UIKit中最复杂的一个控件.今天要向大家介绍的就是如何动态计算UITableViewCell高度的一经验与技巧,在此做一

【转】动态计算UITableViewCell高度详解

转自:http://www.ifun.cc/blog/2014/02/21/dong-tai-ji-suan-uitableviewcellgao-du-xiang-jie/ 站QQ技术群:<疯狂IT人>93916004 不知道大家有没有发现,在iOS APP开发过程中,UITableView是我们显示内容常见的控件,本人觉得它是UIKit中最复杂的一个控件.今天要向大家介绍的就是如何动态计算UITableViewCell高度的一经验与技巧,在此做一些总结方便朋友们查阅. 同时也欢迎广大iOS

UITableView使用AutoLayout动态计算cell高度

UITableView几乎是每个app都需要用的控件,而cell高度自适应也是我们 需要掌握的,当然cell上面的控件也是有多种表现形式,今天小编讲解的是其中一种比较常见的:Auto Layout with UILabel in UITableViewCell. 话不多说,上教程. 首先我们创建一个Sigle View Application的项目,然后拖上一个UITableView到storyboard中,设置好代理并且设置好约束.约束这里就不做讲解了,可以到AutoLayout详解了 解一下

动态计算Label高度

//1.设置该label的numberOfLines为0 self.titleLabel.numberOfLines = 0; //2.字体的设置要与之前相同 NSDictionary * attribute = @{NSFontAttributeName:[UIFont systemFontOfSize:17]}; //3.将size的高度设为最大值 CGSize size = CGSizeMake(355, CGFLOAT_MAX); //4.将label的高度设为动态计算出的size的高度

Android布局之View.measure()动态量取高度并设置布局--(例:动态计算评论高度并显示)

需求是这样的: 在应用程序的详情介绍时,有评论的版块,该页评论最多显示5条,而每条最大字数是140个字符,每条评论可能根据字数不同,所占据的高度也不一样,如有的是1行,有的是2.3行,且评论可以翻页. 图片效果如下: 如何解决这样的问题呢? 首先必须知道的是评论控件不要固定不变,而是需要动态计算并动态添加到显示面板中的. 下面通过实例来说一下. 1.定义布局 定义布局的时候,可以用AbsoluteLayout,因为高度是动态量取的,所以具体坐标是可以求得的.参考如下: <AbsoluteLayo

iOS 动态计算cell高度实用API

// Use the estimatedHeight methods to quickly calcuate guessed values which will allow for fast load times of the table. // If these methods are implemented, the above -tableView:heightForXXX calls will be deferred until views are ready to be display

UILabel 多行文本及动态计算其高度

UILabel *fileNameLabel = [[UILabel alloc]init]; [fileNameLabel setBackgroundColor:[UIColor clearColor]]; [fileNameLabel setFont:[UIFont systemFontOfSize:14]]; [fileNameLabel setNumberOfLines:0]; [fileNameLabel setLineBreakMode:NSLineBreakByTruncating

swift - 动态计算文本高度

func heightOfCell(text : String) -> CGFloat {        let attributes = [NSFontAttributeName:UIFont.systemFontOfSize(14)]        let option = NSStringDrawingOptions.UsesLineFragmentOrigin        let rect:CGRect = text.boundingRectWithSize(CGSize(width: