Проблема
Каждый раз, когда я звоню:
func configure(_ item: ProductViewModel, at indexPath: IndexPath) {
setupProductImage(with: item.productImage)
setupStackView()
setupProductLines(with: item.productLines)
}
, я создаю новый экземпляр productLineLabel = UILabel (), поэтому он будет дублироваться каждый раз при конфигурировании (_ item :)вызывается из cellForRowAtIndexPath.
Решение
Я использовал prepareForReuse, рекомендованный llb для удаления подпредставлений, относящихся к классу UIStackview (содержащих UILabels).Я написал следующее расширение, чтобы сделать это менее утомительным:
func addSubviews(with subviews: [UIView], in parent: UIView) {
subviews.forEach { parent.addSubview($0) }
}
Реализация
Единственное, что осталось сделать, - это вызвать пользовательскую функцию расширения из prepareForReuse, например, так:
override func prepareForReuse() {
let foundStackView = subviews.filter({$0.isKind(of: UIStackView.self)})[0] as? UIStackView
guard let labels = foundStackView?.arrangedSubviews.filter({$0.isKind(of: UILabel.self)}) else { return }
foundStackView?.removeArrangedSubviews(labels, shouldRemoveFromSuperview: true)
}
Кредиты перейдут на llb, см. Комментарии ниже!<3 Спасибо. </p>