indexpath.row 从 1 而不是 0 开始
Posted
技术标签:
【中文标题】indexpath.row 从 1 而不是 0 开始【英文标题】:indexpath.row is starting from 1 instead of 0 【发布时间】:2014-10-21 12:16:22 【问题描述】:我正面临一个 uitableview 的 strance 问题。 有时当我的表的数据源/numberofrowsinsection 有 3 个值时,cellforowatindexpath 从 0-1 而不是 0-0 开始。 有人可以帮我找出导致此问题发生的可能原因。 甚至尝试打印日志,但日志显示为 0 -1 和 0 -2,但不显示 0 -0。 这意味着它不会被第一行调用,即 0 -0。
【问题讨论】:
把委托方法,你试过什么? 有什么问题? 只有当您尝试使用 reloadRowsAtIndexPaths:withRowAnimatio 部分加载表格或直接加载任何部分时,才会发生这种情况。 【参考方案1】:tableView:cellForRowAtIndexPath:
会根据需要调用以显示单元格,如果不显示单元格,则不会调用它。如果没有显示第 0 行,则不会调用部分单元格 0-0。
【讨论】:
但在numberofrowsinsection中我将值传递为3,那么它如何直接跳到1而不是从0开始? 令我惊讶的是,它发生在 ios8 中,但不在 iOS7 中。但我不认为这应该是一个问题,这只是一个疯狂的猜测。 是的,我同意 Zaph,但表格视图能够显示三个单元格,关键是没有调用任何方法,如 reloadRowsatIndexpath 是什么使它跳过 0 并在表格时直接移动到 1能够显示所有三个单元格。 正如我之前提到的,这个问题发生在 ios8 设备中,而不是 ios7 中:( 是的,我在 ios8 中只能看到 2 行,在 ios7 中只能看到 3 行代码。【参考方案2】:就像 Zaph 所说,每当表格想要显示给定索引路径的单元格时,都会调用 tableView:cellForRowAtIndexPath:
,因此,如果您没有得到行为 0 的索引路径,则意味着您可能正在做阻止该单元格显示的东西。
我的第一个建议是调查您的 tableView:heightForRowAtIndexPath:
方法,并且 1) 检查是否使用索引路径行 0 调用它,以及 2) 确保返回 > 0 的内容。
您仅在 iOS 8 上看到它的事实并不一定意味着本机的某些内容已损坏,而是可能表明您的某些有助于上述方法的逻辑受到 iOS 8 更改的影响。 iOS 8 已经抛弃了我进行文本大小计算的方式,所以也许像这样不太明显的东西导致返回的高度不大于 0。
【讨论】:
更改 heightForRowAtIndexPath 为我解决了这个问题,谢谢!【参考方案3】:您可以先检查节数和行数。如果某个section的行号返回0,则不会调用该section。
【讨论】:
【参考方案4】:在我的案例中起作用的是我在课堂上编写了方法估计HeightForRowAt 方法。当我评论该方法时,代码运行良好..
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
我已从我的代码中删除了上述方法。它拯救了我的一天:)
【讨论】:
以上是关于indexpath.row 从 1 而不是 0 开始的主要内容,如果未能解决你的问题,请参考以下文章
从 TableView Objective C 中获取 IndexPath.Row [重复]
(SWIFT 4)如何计算 tableview 中列 indexpath.row 的总和?