您的位置:首页 > 移动开发 > IOS开发

iOS tableview自适应高度

2016-09-03 12:47 337 查看
做了一年的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开发 博客 ios