我有一个 UITableView 用于显示搜索结果。当我打字时,我在打电话Tableview.reloadData()
。从视觉上看,一切正常。当我开始输入时,我最多显示 5 个匹配项,当我低于该值时,列表将正确显示更少的项目。以下是单元格的创建方式和报告的行数。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "placeCell") as! PlaceCell
if shouldShowSearchResults {
let place = filteredPlaces[indexPath.row]
cell.dataSource = place
} else {
let place = allPlaces[indexPath.row]
cell.dataSource = place
}
cell.delegate = self
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if shouldShowSearchResults {
vlog?.debug("Number of FILTERED rows in PlacesTableView: \(filteredPlaces.count)")
return filteredPlaces.count
} else {
vlog?.debug("Number of unfiltered rows in PlacesTableView: \(allPlaces.count)")
return allPlaces.count
}
}
由于 PlaceCell 是一个自定义类,以下是它的一些详细信息:
// I've omitted labels, etc.
class PlaceCell: UITableViewCell {
var dataSource : PlaceView? {
didSet {
if let ds = dataSource {
self.isAccessibilityElement = true
self.accessibilityLabel = ds.getAccessibilityLabel()
} else {
self.isAccessibilityElement = true
self.accessibilityLabel = nil
}
}
}
weak var delegate : PlaceCellDelegate? = nil
override func prepareForReuse() {
self.isAccessibilityElement = false
self.accessibilityLabel = nil
super.prepareForReuse()
}
}
当使用 Google 的 Earl Gray 的 UI 测试由于多个具有相同可访问性标签的单元格而开始失败时,我开始注意到一个问题。从视觉上看,我不明白为什么会失败,因为只有一个可见的单元格匹配。
在使用 Reveal 检查视图时,似乎随着单元格数下降到最大值 5 以下,旧单元格仍在 TableView 中,但被隐藏了。所以有一个隐藏的单元格曾经显示与不同单元格显示的相同数据。
知道为什么会发生这种情况吗?这已经工作了几个月,我不确定发生了什么变化。