Заголовок - это ошибка, которую я получаю, и я понятия не имею, почему, но вот некоторая информация, так что, надеюсь, кто-то здесь сможет мне объяснить.
Я создал подкласс UICollectionViewFlowLayout
, так как это избавляет меня от расчета кадров для ячейки (возможно, это проблема?) в prepareLayout
. Затем я использую информацию UICollectionViewLayoutAttributes
для расчета дополнительного вида, который накладывается на него, и получаю желаемый макет.
Я использую performBatchUpdates:completion:
для добавления, удаления и обновления представления. Вставка работает нормально, однако при удалении элементов появляется ошибка, указанная в заголовке.
Итак, я знаю, почему возникает ошибка, но я не знаю, почему это вообще должно происходить. Чтобы пояснить на примере сценария, вызывающего проблему
- Начните с 1 элемента с 1 дополнительным видом 1 раздел
- Добавьте еще два элемента (
prepareLayout
видит 3 элемента с 3 дополнительными представлениями) - Удалить элемент (
prepareLayout
видит 2 представления с 2 дополнительными представлениями) layoutAttributesForSupplementaryViewOfKind:atIndexPath:
вызывается с запросом атрибутов для пути индекса с section:0 и item:2- Сбой, потому что он запросил атрибуты для третьего дополнительного представления, хотя ранее он вызывал подготовку макета, устанавливая 2 элемента и 2 дополнительных представления.
- Бросьте руки вверх в смирении и отчаянии
поэтому оскорбительная функция, насколько я могу судить, такова:
- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
{
return self.layoutInfo[elementKind][indexPath];
}
который, конечно, автоматически вызывается внутренней сетью UICollectionView
, поэтому я понятия не имею, почему он запрашивает это дополнительное представление по этому индексному пути.
У кого-нибудь есть идеи? Возможно, именно так я использую performBatchUpdates:completion:
, но удаление работало нормально, пока не были добавлены дополнительные представления. При необходимости я могу предоставить больше кода/объяснений.