Код:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
registerCells()
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifierForItem(at: indexPath.row), for: indexPath) as? HorizontalCollectionTableViewCell else {
return UITableViewCell()
}
if cellViewModels.count > indexPath.row {
let viewModel = cellViewModels[indexPath.row]
cell.viewModel = viewModel
}
return cell
}
Передача viewModel
в ячейку:
var viewModel: TitleAccessoryButtonCollectionViewModel? {
didSet {
guard let viewModel = viewModel else {
return
}
titleLabel.text = viewModel.title
if let buttonTitle = viewModel.accessoryButtonModel?.title {
setAccessoryButtonTitle(buttonTitle)
}else{
accessoryButton.hideTitleLabel()
}
if let buttonImage = viewModel.accessoryButtonModel?.image {
accessoryButton.buttonImageView.image = buttonImage
}
else {
accessoryButton.hideImageView()
}
sectionContentImage.image = viewModel.sectionContentImage
titleLabelLeadingConstraint.constant = viewModel.titleLabelLeadingSpacing
accessoryButton.isHidden = viewModel.hideAccessoryButton
sectionContentView.isHidden = viewModel.hidePremiumContentView
let collectionViewModel = viewModel.collectionViewModel
collectionViewHeight.constant = CGFloat(collectionViewModel.height)
collectionViewModel.setup(collectionView: collectionView)
collectionView.delegate = collectionViewModel.delegate
collectionView.dataSource = collectionViewModel.dataSource
collectionView.reloadData()
}
}
Описание:
У меня есть шесть UITableViewCell
в основном, и они могут использоваться многократно.
В каждом UITableViewCell
есть UICollectionView
.
Пять UICollectionView's
используйте обычные UICollectionViewFlowLayout's
, но нужен собственный подкласс.
Проблема в том, что когда UITableViewCell
с пользовательским UICollectionViewFlowLayout
скрывается, и отображается новый UITableViewCell, а ячейка с этим пользовательским макетом потока используется повторно, а UICollectionView
уже имеет UICollectionViewFlowLayout
но это плохо.
Есть какой-нибудь хороший способ очистить этот макет или предотвратить эту ситуацию?
Может быть, что-то с prepareForReuse()
?
Я добавляю это UICollectionView
это розетка в UITableViewCell
.