При скролле ленты у части ячеек остаётся чужая плашка «Скидка»
func tableView(_ tv: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tv.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! ItemCell
let item = items[indexPath.row]
cell.titleLabel.text = item.title
if item.hasDiscount {
cell.badgeView.isHidden = false
}
return cell
}
При скролле плашка «Скидка» появляется у товаров без скидки. Название при этом всегда верное. Почему?
- Ячейки переиспользуются, а плашка настраивается только в одной ветке условия
- dequeueReusableCell(withIdentifier:for:) возвращает одну и ту же ячейку для всех строк, нужен вариант без indexPath
- Таблица не перерисовывается при скролле, поэтому после подгрузки данных нужно звать reloadData
- Приведение через as! ломает связь ячейки с моделью, из-за чего часть свойств берётся от соседней строки
