UITableView indexPathsForVisibleRows返回结果不准确问题咨询
UITableView indexPathsForVisibleRows 减1逻辑的原因
这个_visibleBounds.height减1的设计,是苹果为规避边界误判的容错机制,核心原因有两点:
过滤极小可见区域的cell
UITableView判断“有效可见行”时,会把可视区域高度减去1逻辑像素,目的是排除那些仅露出极少量(≤1像素)的cell。在你的场景里,row1的cell仅露出0.8像素的高度,刚好触发这个过滤规则——减去1后,可视区域的底部边界(168.8 + 831 = 999.8)低于row1的顶部坐标(1000),因此row1不被计入indexPathsForVisibleRows。统一可见性判断标准
考虑到布局精度问题(比如浮点型contentOffset、屏幕像素对齐误差),很容易出现cell仅露出1像素边缘的情况,用户几乎无法察觉,但如果被判定为“可见行”,可能会触发不必要的cell回调或数据更新。这个减1的逻辑就是为了统一标准:只有当cell的可见部分超过1像素时,才会被认定为有效可见行。
另外要明确visibleCells和indexPathsForVisibleRows的本质差异:
visibleCells返回当前已加载到内存中的cell集合,只要tableView为填充可视区域(包括预加载)创建了cell,就会被包含,不管实际露出多少。indexPathsForVisibleRows是基于苹果定义的“有效可见”规则筛选出的行索引,更贴近用户实际能感知到的可见范围。
内容的提问来源于stack exchange,提问作者Ping
相关产品推荐
相关产品推荐

