Я использую самодельный размер UITableViewCell
, содержащий UICollectionView
, который увеличивает его высоту на основе количества элементов, полученных из API.
Представления структурированы следующим образом
UITableView
UITableViewCell
UICollectionView
UICollectionViewCell
UICollectionViewCell
UICollectionViewCell
Когда UICollectionView
получает новые данные, кадр UITableViewCell
обновляется следующим кодом
layoutIfNeeded()
collectionView.reloadData()
collectionView.collectionViewLayout.invalidateLayout()
collectionView.layoutIfNeeded()
collectionView.snp.updateConstraints { make in
make.height.equalTo(collectionView.collectionViewLayout.collectionViewContentSize).priority(.high)
}
Проблематическая c часть добавляет пагинацию при прокрутке внизу UICollectionView
. Код саморазмера вызывает, что willDisplay cell
вызывается для каждой ячейки UICollectionView
, вызывая запрос // Fetch more data
, который вызывает новые данные, обновляет высоту UICollectionView
, снова вызывая запрос API, и это бесконечное число l oop.
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if indexPath.item == collectionView.numberOfItems(inSection: indexPath.section) - 1 {
// Fetch more data
}
}
Есть идеи, как избежать этого цикла? Спасибо.