У меня есть UICollectionView
, который отображает содержимое с NSFetchedResultsController
. CollectionView имеет один раздел, и в этом разделе есть заголовок. Заголовок позволяет пользователю фильтровать содержимое в виде коллекции. Делегат представления заголовка подключен к UIViewController
, содержащему представление коллекции.Содержимое UICollectionView скрыто после reloadData
Как только пользователь изменяет один из параметров фильтра, заголовок вызывает сообщение его делегату. Делегат меняет предикат на fetchRequest
своего NSFetchedResultsController
и вызывает -[NSFetchedResultsController performFetch:]
. Затем необходимо просмотреть уведомление о том, что содержимое изменилось. Это можно сделать несколькими способами, но способ, который я предпочитаю, - позвонить по телефону -[UICollectionView reloadData]
. К сожалению, этот метод не работает, как и ожидалось: весь запрос коллекции исчезает, когда я вызываю этот метод. Таковы некоторые замечания, которые я сделал по этому вопросу:
- Все клетки и заголовок первой секции (и только) имеют их
hidden
флаг установлен вYES
. Я попытался проследить, какой метод вызвал это, установив символическую точку останова на-[UIView setHidden:]
. К сожалению, он никогда не ломается внутри подматрицыUICollectionView
. collectionView:cellForItemAtIndexPath:
никогда не вызывается после звонка-[UICollectionView reloadData]
.collectionView:viewForSupplementaryElementOfKind:atIndexPath:
никогда не вызывается после звонка-[UICollectionView reloadData]
.numberOfSectionsInCollectionView:
по-прежнему вызывается и по-прежнему возвращает правильное число (в этом случае 1).collectionView:numberOfItemsInSection
по-прежнему вызывается и по-прежнему возвращает правильное число (в этом случае 1).
То, что я пытался до сих пор решить проблему:
- отключающий все настройки (
sectionInset
,itemSize
) наUICollectionViewFlowLayout
например - Отключение всех настроек (
separatorInset
) на экземпляреUICollectionView
- имеют заголовок, добавленный как подпункт
UICollectionView
и устанавливающийcontentInset
соответственно. К сожалению,UICollectionView
не любит, чтобы я закалялся с ограничениями автоматического макета и сбоями, когда я это делаю. - звонок
[UICollectionView reloadSections:]
вместо[UICollectionView reloadData]
. Это работает, но мне не нравится анимация. - вручную вставлять, удалять и обновлять строки в первом разделе. Это работает до тех пор, пока контроллер представления, содержащий просмотр коллекции, находится в памяти. Как только оно отменяется, приложение вылетает с ошибкой утверждения в
-[UICollectionView dealloc]
.
Он не чувствует себя хорошо, чтобы иметь настройки заголовка, таким образом, но, к сожалению, UICollectionView
не имеет глобальный заголовок, как UITableView
(tableHeaderView
).
Эй, нашел решение? –
Нет, я не могу найти решение – datwelk
Хорошо, спасибо за ответ. –