TableCell高度的控制

时间:2023-02-01 03:13:05

TableCell高度的控制

计算并指定行高rowHeight

  • 强制指定:self.tableView.rowHeight = 88
  • 或实现UITableViewDelegate.tableView(..heightForRowAtIndexPath) -> CGFloat方法动态指定每行行高
    此时rowHeight的设置将视为无效

估算高度estimatedRowHeight(iOS7)

设置方式与一般cell高度设置类似。

提供高度估算值可延迟未显示cell的实际高度计算,不使用时在table加载时马上执行所有cell的高度计算,以提供进度条的长度依据。

但实际运行时会一边加载显示cell,一边运算当前准备显示的cell实际高度,从而导致界面卡顿以及进度条跳跃变化。

开启估算后有助于减少cell高度计算的总次数。

self-sizing cell(iOS8)

新特性:自计算高度cell。

使用步骤:

  1. 先指定估算高度 self.tableView.estimatedRowHeight = 80 (强制必须设置)
  2. 设置行高 self.tableView.rowHeight = UITableViewAutomaticDimension (实际上已经是默认值,可省略设置)

已知问题

不论使用UITableViewDelegate还是 self-sizing 方式指定行高:
iOS7 中cell高度具有缓存机制,实际高度计算次数与数据总量相关,满足要求后不再重新计算,不影响View回收。
iOS8 中则每次显示cell都将执行一次新的高度计算,以支持cell的动态高度变化需求,但会导致明显的滑动卡顿。

第三方 UITableView + FDTemplateLayoutCell

第三方组件方案,既有iOS8 self-sizing功能简单的API,又可以达到iOS7流畅的滑动效果,还保持了最低支持iOS6。

类似iOS7中提供cell高度缓存,并且在数据更新后对失效部分的缓存进行标记重计算。

cell的高度缓存会在UITableView没有滑动的空闲时刻执行计算,保证滑动流畅性。

参考:http://blog.sunnyxx.com/2015/05/17/cell-height-calculation/