cell行高的动态计算

UITableView控件是我们日常开发中经常使用的控件之一,cell动态高度的计算也是老生常谈的问题,我们一般计算高度的方法都是,cell中得各个控件的高度计算出来,然后给外界抛出一个接口,用来获取cell高度,但是tableView返回高度的代理方法,总是频繁的调用,我们还要注意不要在主线程使用过于复杂的算法以免阻塞主线程.

  1. 预加载
    苹果在iOS7之后给我们新增一个API
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0);

下面我们先来了解一下tableView计算高度的机制.
tableView在渲染之前会不停的调用heightForRowAtIndexPath方法返回对应cell高度,然后得到tableView的总高度,这意味在显示tableView之前需要进行大量的高度计算(这不是一屏,是计算所有数据的高度,并且是在主线程,很有可能会造成加载过慢,卡顿等现象)。有人问为什么不能等页面滑动到某个 cell 的时候,再计算高度呢?答案就是,tableView有一个小的ScrollIndicator滚动条,高度是用来确定滚动条的大小和位置的。
estimatedHeightForRowAtIndexPath这个方法的意思就是返回一个cell 高度的估计值,这样tableView就直接取估值用来确定滚动条的信息而不需要调用多次算高的代理方法,这样就可以大幅度提高tableView的加载速度。

需要注意的是:1.它是IOS7之后才有的API。2.如果你的业务需求需要你一开始使用到tableView的contentSize或者contentOffset,那么请慎用。
2.autoLayout自动算高
参考:https://my.oschina.net/hantianyu/blog/516244

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,056评论 3 119
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • 周围谁又突然恋爱了,谁又宣布分手了,谁即将步入婚姻殿堂,谁的婚姻还没开始就看到了结尾……信息便利快节奏的社会里,这...
    惑然阅读 8,179评论 2 5
  • 1. 数组字面量 2. 长度 lenght 3. 删除 splice() 4. 枚举 for循环 5. 容易混淆的...
    __越过山丘__阅读 1,549评论 0 0
  • 题记 近来,突然萌生了对设计风格进行归纳学习的想法,试着设计了几个专题,其中之一便是关于日本的极简设计风格。 研究...
    守望一片麦田阅读 4,892评论 0 0

友情链接更多精彩内容