gpt4 book ai didi

ios - UITableViewCell 仍在屏幕上时被重用?

转载 作者:行者123 更新时间:2023-11-29 03:16:01 27 4
gpt4 key购买 nike

我遇到了一个看起来很奇怪的问题(对我来说确实如此!)

我正在使用 UITableView 来显示每个包含 UIWebView 的单元格。我意识到这从表面上看是个坏主意,但我真的不能以任何其他方式做到这一点。

UIWebView 完成加载时,我正在缓存每个单元格的高度,然后调用:

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[cellIndexPath]
withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

所有相关代码都是in a Gist here .

我还将 UIWebView 缓存在数据源的字典中,因此可以在重新加载单元格时重复使用它。

这似乎有点工作,但我遇到了很多问题,即单元格的内容会随机消失。我已经添加了一些日志来确定发生了什么,以什么顺序,似乎一些单元格正在被重复使用当它们还在屏幕上

我在向下滚动时在我的日志中看到了这个:

2014-02-11 13:45:49.091 EApp[45936:70b] Generating cell for 1: Panning
2014-02-11 13:45:49.245 EApp[45936:70b] Generating cell for 2: Calibration
2014-02-11 13:45:50.063 EApp[45936:70b] Generating cell for 3: Aperture Priority
2014-02-11 13:45:50.063 EApp[45936:70b] Reusing cell: Stopping down

在这种情况下,“停止”是一个仍在屏幕上的单元格。 “生成单元格”项记录在数据源的 cellForRowAtIndexPath 中,“重用”消息记录在单元格的 prepareForReuse 中。

有人知道这里会发生什么吗?我知道这看起来很复杂。

最佳答案

prepareForReuse 中的以下行可能是罪魁祸首:

if ([self.contentWebView isDescendantOfView:self.contentWebView]) {
[self.contentWebView removeFromSuperview];
}

因为 contentWebView 永远不是它自己的后代,所以它不会从单元格中删除,并且 contentView 将包含两个 webview在 cellForRowAtIndexPath 之后:

你可能想说:

if ([self.contentWebView isDescendantOfView:self.contentView]) {
[self.contentWebView removeFromSuperview];
}

或者简单地说:

[self.contentWebView removeFromSuperview];

关于ios - UITableViewCell 仍在屏幕上时被重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21703807/

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