UITableView性能优化以及动态计算cell高度的方法
一、
//以下会简称计算cell真实高度方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
//以下会简称创建cell方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
//以下会简称估算cell高度方法
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0);
以前计算cell高度会优先调用计算cell真实高度方法 这个方法会一次性计算所有cell的高度,非常消耗性能
而且由于是先计算cell高度 才会再去调用创建cell的方法,按照以前计算cell真实高度的方式 是提前在模型里面计算出cell的高度,然后在返回高度的方法里面去取cell对应模型的高度,非常的耗时 费劲
算cell高度方法 是iOS7之后新增加的方法 它是一个估算cell大概高度的方法,最终还是会调用计算cell真实高度方法
1、是会在调用heightForRowAtIndexPath 这个方法之前 调用这个估算高度estimatedHeightForRowAtIndexPath 的方法。
2、接着去调用创建cell的方法
3、接着最后才调用返回heightForRowAtIndexPath 返回cell真实高度的方法
这个不光节省性能 还比较容易实现cell动态高度的计算,在cell里面 传递model进去之后 ,在给所有子控件赋值之后 调用[cell layoutIfNeed] 强制布局,然后 把传递进来的model 设置 他的高度 就可以了 最后在调用heightForRowAtIndexPath 这个返回真实高度的时候得到对应的model就可以设置其真实高度,但是得注意一下提示
使用自动布局时 当你强制进行布局,计算label高度会有问题 需要设置
textLabel.preferredMaxLayoutWidth = 设置label的最大尺寸;