When cells are reused, the UILabels inside the UIStackView begin to lose their size. What it may be related to. For the table, cell heights are set in UITableView.automaticDimension.
I do not understand how this is related to re-use, because I use prepareForReuse.
class SalesPointTableViewCell: UITableViewCell {
private var nameLabel = UILabel()
private var someView: UIStackView = {
$0.distribution = .fill
$0.translatesAutoresizingMaskIntoConstraints = false
$0.setContentCompressionResistancePriority(UILayoutPriority.required, for: .vertical)
return $0
}(UIStackView())
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
translatesAutoresizingMaskIntoConstraints = false
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(nameLabel)
contentView.addSubview(someView)
nameLabel.snp.makeConstraints {
$0.left.top.equalToSuperview()
}
someView.snp.makeConstraints {
$0.left.right.width.equalToSuperview()
$0.top.equalTo(nameLabel.snp.bottom)
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func prepareForReuse() {
super.prepareForReuse()
nameLabel.text = nil
someView.arrangedSubviews.forEach {$0.removeFromSuperview()}
}
func configure(name: String, points: [String]) {
self.nameLabel.text = name
points.forEach { pointName in
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.numberOfLines = 1
label.text = pointName
self.someView.addArrangedSubview(label)
label.sizeToFit()
}
}
}