Как я могу проверить, находится ли заголовок UICollectionView в настоящее время в прямоугольнике представления?

Мне нужно знать, отображается ли в настоящее время дополнительное представление заголовка UICollectionView, чтобы заставить его обновлять/обновлять при изменении настроек/предпочтений приложения.

Если заголовок не отображается, после прокрутки заголовок будет отображаться соответствующим образом, но сейчас это происходит только при загрузке, и если пользователь прокручивает заголовок, а затем обратно.

Если заголовок находится в поле зрения, мне нужно его обновить, но я действительно не хочу перезагружать весь 0-й раздел каждый раз, когда этот параметр изменяется (только когда заголовок находится в поле зрения...).




Ответы (1)


Вы можете сделать что-то вроде сохранения свойства, когда представление удаляется из очереди. Затем измените его, когда он исчезнет, ​​используя:

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath;

В зависимости от того, как вы хотите, чтобы ваше обновление происходило, вы можете либо сохранить bool isVisible, либо запустить NSTimer, когда он появится, и остановить таймер, когда он исчезнет.

К сожалению, не похоже, что есть метод visibleSupplementaryViews.

person benuuu    schedule 17.09.2013
comment
эй, поэтому я попытался использовать didEndDisplayingSuppView. Вот проблема: представление заголовка прокручивается в поле зрения или в настоящее время находится в поле зрения. флаг headerVisible = true. изменить параметр, который требует обновления заголовка. вызвать разделы перезагрузки. viewForSuppElementOfKind устанавливает headerVisible = true. затем по какой-то причине вызывается didEndDisplayingSuppView, и я устанавливаю для isVisible значение false, что оставляет меня в неправильном состоянии. рабочий процесс всегда заканчивается didEndDisplaying, поэтому я не могу правильно установить флаг. - person topwik; 17.09.2013
comment
в моем случае, когда у меня есть пустое представление коллекции для запуска, а viewForSuppView вызывается onload. Когда у меня есть данные и я перезагружаю коллекцию, вызывается didEndDisplaySupp. затем, когда данные перезагружаются, снова вызывается viewForSuppView. что хорошо. однако при перезагрузке вида раздела, когда я думаю, что заголовок находится в поле зрения, я вызываю reloadSections, и вызывается viewForSuppView для удаления из очереди нового представления заголовка, headerVisible= true set. затем вызывается didEnd, чтобы завершить не самый последний, новый viewForSuppView, а тот, который был до этого... что не ожидается. по крайней мере в моем случае. - person topwik; 17.09.2013
comment
Вы можете сохранить ссылку на дополнительный вид при его создании. например в viewForSupplementaryView выполните if (indexPath.section == 0) { if (!self.myHeader) {self.myHeader = [collectionView dequeueSuppView]; } toReturn = self.myHeader; }, затем выполните обновление с этой ссылкой на свойство. Просто не забудьте обнулить эту ссылку в нужное время из-за того, как CV повторно использует представления. - person benuuu; 19.09.2013