iOS tableview自适应高度

做了一年的ios开发,一直从社区中获取各种帮助,也是时候回报社会写写博客啦,主要是自己初学时遇到的一些问题的总结,希望能帮到大家,第一篇博客,写的不好请轻喷啦。
这里所说的自适应高度都是根据autolayout的约束来自适应高度,没有学过autolayou的同学请先移步学习哦。
tableview的自适应高度分为ios8.0前和ios8.0后
1、ios8.0后
首先说简单的ios8.0后的,苹果已经帮我们做了优化,如果项目不支持ios8.0以前的版本的话两句代码即可搞定。曾经在用过swift上用过没有问题,但是在oc上用有时候不知道为什么会计算的不是自己想要的高度,所以还是比较习惯自己去计算

self.tableView.estimatedRowHeight=71.0f;
self.tableView.rowHeight=UITableViewAutomaticDimension; 

注意不要去实现heightForRow代理方法即可。
2、ios8.0以前
废话不多说了我就直接上码吧

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    // 创建可重复使用的Cell
    static MainCell *sizingCell = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sizingCell = [self.tableView dequeueReusableCellWithIdentifier:reuseID];
        if (!sizingCell) {
            sizingCell = [[[NSBundle mainBundle] loadNibNamed:reuseID owner:self options:nil] lastObject];
        }
    });

    //设置cell自控件内容
    sizingCell.titleStr = self.titleStr;
    sizingCell.contentStr=self.contentStr;
    [sizingCell loadData];

    //先让约束实现
    sizingCell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.frame), CGRectGetHeight(sizingCell.bounds));
    [sizingCell setNeedsLayout];
    [sizingCell layoutIfNeeded];
    //获取cell的contentView的真实高度,因为分隔线是被加在cell底边和contentView底边,所以要加上1px的高度
    CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    return size.height + 1.0f;
} 

主要根据cell里面的内容计算cell的高度,用多线程只创建一次cell确保不会占用太多内存,然后设置cell的内容,再实现约束,最后计算高度。
各位可以看着如下demo来看,里面还有一些细节需要注意的
1、RWLabel是用来解决ios6.0版本前的计算不准确的问题(lable的继承类换成RWLabel)
2、注意要把label的行数设置成0行哦
3、要记得勾选label的preferred wi.. 属性更新其大小
我的git上面的demo

你可能感兴趣的:(ios学习)