偶然发现一个现象,跟预期不太一样。
如论如何设置Tableview的行高,它创建的用于的复用Cell数量是恒定的。
那么这是什么情况呢?
-
行高为100时
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: Self.ID)
if cell == nil {
cell = MyTableViewCell(style: .default, reuseIdentifier: Self.ID)
print("indexPath.row + \(indexPath.row)")
}
cell!.textLabel?.text = "\(indexPath.row)"
return cell!
}
// tableView.rowHeight = 100.0
控制台输出结果:
indexPath.row + 0
indexPath.row + 1
indexPath.row + 2
indexPath.row + 3
indexPath.row + 4
indexPath.row + 5
indexPath.row + 6
indexPath.row + 7
indexPath.row + 8
indexPath.row + 9
indexPath.row + 10
indexPath.row + 11
indexPath.row + 12
indexPath.row + 13
indexPath.row + 14
indexPath.row + 15
indexPath.row + 16
indexPath.row + 17
indexPath.row + 18
indexPath.row + 19
-
行高为200时
// tableView.rowHeight = 200.0
控制台输出结果:
indexPath.row + 0
indexPath.row + 1
indexPath.row + 2
indexPath.row + 3
indexPath.row + 4
indexPath.row + 5
indexPath.row + 6
indexPath.row + 7
indexPath.row + 8
indexPath.row + 9
indexPath.row + 10
indexPath.row + 11
indexPath.row + 12
indexPath.row + 13
indexPath.row + 14
indexPath.row + 15
indexPath.row + 16
indexPath.row + 17
indexPath.row + 18
indexPath.row + 19
-
不设置行高时,也就是默认行高为44
// tableView.rowHeight = 44
控制台输出结果:
indexPath.row + 0
indexPath.row + 1
indexPath.row + 2
indexPath.row + 3
indexPath.row + 4
indexPath.row + 5
indexPath.row + 6
indexPath.row + 7
indexPath.row + 8
indexPath.row + 9
indexPath.row + 10
indexPath.row + 11
indexPath.row + 12
indexPath.row + 13
indexPath.row + 14
indexPath.row + 15
indexPath.row + 16
indexPath.row + 17
indexPath.row + 18
indexPath.row + 19
到这里是不是恍然大悟了。。。
结论
UITableView的复用机制所创建的Cell数量不随自定义的行高而改变,而是恒定的数值。
即在默认行高下,整个屏幕所能展示的最多Cell的数量,️根据屏幕高度与默认行高的比值计算得出!