0

我有一个 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 中,但被隐藏了。所以有一个隐藏的单元格曾经显示与不同单元格显示的相同数据。

知道为什么会发生这种情况吗?这已经工作了几个月,我不确定发生了什么变化。

4

1 回答 1

1

遍历视图层次结构总是很危险的;事情可以改变,也许这就是这里发生的事情。

无论如何,您可以通过使用仅选择具有所需标签的可见项目来使您的测试更加健壮grey_sufficientlyVisible

就像是:

grey_allOf(grey_accessibilityLabel("Whole Foods Market, East Mayo Boulevard, Phoenix"), grey_sufficientlyVisible(), nil)
于 2019-01-03T08:44:05.367 回答