UITableView 单元格在滚动时损坏
UITableView cells getting corrupted upon scrolling
在我的 iOS 应用程序中,我正在处理 UITableView 中的一个故障。我的 table 视图中的每个单元格都包含三个图标(三个小图像代表滑板、自行车和旱冰鞋)。通过查看第一个应用程序屏幕截图 here 查看此 table 视图的屏幕截图,您就会明白我在说什么。
在我的 table 视图的每个单元格中显示的这三个图标是 "tinted" 黑色或灰色,具体取决于从 API 调用中异步检索的布尔值。到目前为止,在使用该应用程序时,每个单元格始终将所有三个图标都染成黑色,所以我从来没有 运行 遇到任何问题......直到我测试了当其中一个图标是灰色时会发生什么。
当所有图标都是黑色时,就没有问题了。当一个单元格中只有一个图标是灰色时,一切都乱套了。一开始 table 视图会正常加载,并且只有一个图标变灰。但是,当您向下滚动或拉动以刷新 table 视图时,突然间其他单元格开始包含灰色图标,而这些图标本不该包含。当您上下滚动时,单元格会变得越来越损坏,最终大多数单元格都会显示灰色图标,而实际上只有一个单元格应该显示。这很奇怪...就像一个灰色图标正在成倍增加并感染我的 table 视图 lol。
这里的问题是我显然不知道如何正确使用和更新 UITableView 中的单元格。我真的不知道问题是什么。我在 iOS 开发方面经验不足。我的代码非常草率而且有点令人尴尬,但如果您仔细阅读它并告诉我我做错了什么,我将不胜感激。
查看与此问题相关的代码here。感谢您的帮助!
无论您创建 table 单元格,您都需要将它们重置为基值。我猜您目前已将其设置为如果它满足布尔参数,则将其设置为灰色,否则为黑色。最初将它们全部设置为黑色,然后如果满足布尔值,则将其设置回灰色。
else if (indexPath.row < self.parks.count) {
skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor())
}
其余代码,如果它满足参数
您需要根据您的布尔值将UIImageView.image
设置为不同的颜色。
if (!parkForIndexPath(indexPath).skateboardersAllowed()) {
skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor())
} else {
skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.blackColor())
}
滚动过程中部分图像变灰的原因是因为您重复使用了单元格,所以当带有灰色图像的单元格被重复使用时,由于您没有重置颜色,灰色图像仍然会持续存在。
在我的 iOS 应用程序中,我正在处理 UITableView 中的一个故障。我的 table 视图中的每个单元格都包含三个图标(三个小图像代表滑板、自行车和旱冰鞋)。通过查看第一个应用程序屏幕截图 here 查看此 table 视图的屏幕截图,您就会明白我在说什么。
在我的 table 视图的每个单元格中显示的这三个图标是 "tinted" 黑色或灰色,具体取决于从 API 调用中异步检索的布尔值。到目前为止,在使用该应用程序时,每个单元格始终将所有三个图标都染成黑色,所以我从来没有 运行 遇到任何问题......直到我测试了当其中一个图标是灰色时会发生什么。
当所有图标都是黑色时,就没有问题了。当一个单元格中只有一个图标是灰色时,一切都乱套了。一开始 table 视图会正常加载,并且只有一个图标变灰。但是,当您向下滚动或拉动以刷新 table 视图时,突然间其他单元格开始包含灰色图标,而这些图标本不该包含。当您上下滚动时,单元格会变得越来越损坏,最终大多数单元格都会显示灰色图标,而实际上只有一个单元格应该显示。这很奇怪...就像一个灰色图标正在成倍增加并感染我的 table 视图 lol。
这里的问题是我显然不知道如何正确使用和更新 UITableView 中的单元格。我真的不知道问题是什么。我在 iOS 开发方面经验不足。我的代码非常草率而且有点令人尴尬,但如果您仔细阅读它并告诉我我做错了什么,我将不胜感激。
查看与此问题相关的代码here。感谢您的帮助!
无论您创建 table 单元格,您都需要将它们重置为基值。我猜您目前已将其设置为如果它满足布尔参数,则将其设置为灰色,否则为黑色。最初将它们全部设置为黑色,然后如果满足布尔值,则将其设置回灰色。
else if (indexPath.row < self.parks.count) {
skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor())
}
其余代码,如果它满足参数
您需要根据您的布尔值将UIImageView.image
设置为不同的颜色。
if (!parkForIndexPath(indexPath).skateboardersAllowed()) {
skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor())
} else {
skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.blackColor())
}
滚动过程中部分图像变灰的原因是因为您重复使用了单元格,所以当带有灰色图像的单元格被重复使用时,由于您没有重置颜色,灰色图像仍然会持续存在。