gpt4 book ai didi

ios - 为什么在单元格不可见时调用 cellForRowAtIndexPath?

转载 作者:行者123 更新时间:2023-11-28 08:48:01 25 4
gpt4 key购买 nike

我有一个 UITableViewController 位于 Container 内,而该 Container 位于另一个 UIViewController 内。我在 Storyboard中构建了它。 Here is a snap.有问题的 UITableViewController 位于右侧,称为 LayerTableViewController

出于某种原因,正在为当前不可见的单元格调用此 UITableView 的 cellForRowAtIndexPath 方法。我通过将方法更改为以下内容对此进行了测试:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("layerCell", forIndexPath: indexPath) as! LayerTableViewCell

// Configure the cell...

cell.layerCircleView.layer.cornerRadius = cell.layerCircleView.layer.bounds.width / 2
let label = UILabel(frame: CGRect(x: cell.layerCircleView.frame.midX - 10, y: cell.layerCircleView.frame.midY - 10, width: 20, height: 20))
label.text = String(indexPath.row)
cell.layerCircleView.addSubview(label)
print("indexPath.row: \(indexPath.row)")

return cell
}

这段代码产生了以下奇怪的结果。在控制台中,偶尔会乱序打印数字。不在可见屏幕附近的单元格将其 indexPath.row 传递给此方法。此外,我正在制作的 UILabels 都是在彼此之上呈现的。 Here is a combined image of the simulator and terminal output.如您所见,当 indexPath.row 位于二十几岁左右时,有一个随机行显示 indexPath.row: 0

总而言之,为什么调用 cellForRowAtIndexPath 时带有一个当前不可见的 indexPath.row,以及为什么数字呈现在彼此?

最佳答案

所以我仍然不确定为什么对于不可见的单元格随机调用 cellForRowAtIndexPath,但这似乎不是什么大问题。我以为那和叠加渲染是相关的,但实际上并没有。

重叠渲染的问题是所有 UILabels 都被添加到 UITableViewCell 的 subview 中,即 cell.layerCircleView。因此,正如我发现的那样,当单元格被重用时,对 layerCircleView 的引用也是如此。所以我要做的就是在它离开屏幕后清理 View :

override func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let cell = cell as! LayerTableViewCell
for subview in cell.layerCircleView.subviews {
subview.removeFromSuperview()
}
}

关于ios - 为什么在单元格不可见时调用 cellForRowAtIndexPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34778009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com