IOS 实现动态分配tablecell高度

也许你会遇到这样一个问题,或者需要这么一个功能。
表中每个单元格的高度随着该单元格的内容多少而变化。尤其内容不止是文字的时候

其实要实现这个功能很简单。
首先所谓的动态分配单元格高度只是效果上看起来是这样,其实还是跟我们平常设置
单元格高度一样,每行先分配高度。
这里就一个demo来说说吧

要实现这个功能其实最重要的就是下面的两个方法

1、//设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *text = .......;
//这里的text具体内容就是你要在单元格上显示的内容

    CGSize constraint = CGSizeMake(300, 2000.f);
    //先设置一个约束,这个是为了在宽度一定的时候计算text内容所占视图的大小
    //高度尽量设的大一下,因为你不确定text具体内容有多少
    
    CGSize  size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
   //这里利用NSString的一个方法来计算text所占大小,
   //感谢NSString为我们封装了这个方法,使得这个功能得以实现
   
    CGFloat height = MAX(size.height,40.0f);

    //这里是为了给单元格高度设置一个最低限度


    return  height;

}


2、//配置每个单元
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UILabel *textLabel = nil;
    //先创建一个用于显示文字的label,当然也可以用其他的,
   static  NSString *cellIndentifier = @"indentifier";
    //为单元格创建一个专属标签
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
    //先搜索缓冲区看有没有专属标签的cell
    
    if (cell == nil) {
       //如果没有那么就创建一个
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
        
        //把标签初始化
        textLabel = [[UILabel alloc]initWithFrame:CGRectZero];
        textLabel.font = [UIFont systemFontOfSize:14];
        textLabel.tag = 1;
        //这里设置tag值以便以后调用
        
        //将label添加到cell
        [[cell contentView]addSubview:textLabel];

    }
    
    NSString *text = ......;
    //同上面的
    CGSize constraint = CGSizeMake(300, 2000.f);
    CGSize  size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
   
    if (!textLabel) {
        textLabel = (UILabel *)[cell viewWithTag:1];
    }

    //如果label是空的那就通过tag值调用


    textLabel.text = text;
    textLabel.frame = CGRectMake(10, 10, 300, size.height);
    //通过text内容所占size的设置label所显示在的区域
    
    return cell;
    
}


功能核心也就是以上两个方法,是不是很简单?当然这只是纯文字,要是还混合有图片呢?
其实原理是一样的,UIImage 也有个属性 size ,说了这个你应该就知道该怎么办了吧?
好了就到这里,后面附上我做的一个关于图片的demo,若是还不懂可以跟我讨论一下。

这是这个demo的截图,可以看一下效果

             

这个demo的链接:http://download.csdn.net/detail/u012884714/6795293


自己遇到了这个问题,然后查资料实现了这个功能,在这里跟大家分享了 —— LC




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值