Как лучше всего создать очень гибкий/динамический заголовок в UICollectionView?

Мне нужно построить UICollectionView с UICollectionViewFlowLayout и очень динамичным «заголовком» (для ясности я назову его «представление A», чтобы не смешивать его с настоящим заголовком представления коллекции), но я Я не уверен, как лучше всего это сделать: коллекцияViewCell, заголовок или дополнительное представление?

Что я имею в виду под гибким, маркированный список упорядочен по убыванию важности:

  1. Представление A будет содержать кнопки и подпредставления, которым необходимо обнаруживать жесты, поэтому я должен иметь возможность обнаруживать действия в подпредставлениях представления A.
  2. Мне нужно иметь возможность перезагружать данные в представлении коллекции без перезагрузки представления A.
  3. Мне нужно иметь возможность обновлять макет подвидов представления A, когда захочу (например, в viewDidScroll представления коллекции delegate обновить в соответствии с contentOffset изменениями).
  4. Если возможно, я хотел бы иметь возможность динамически изменять рамку представления A (я имею в виду без необходимости аннулировать макет). Я хотел бы, чтобы вид A был липким вверху и уменьшался при прокрутке, пока не исчезнет. Взгляните на недавно запущенное приложение «Секрет», чтобы понять, что я имею в виду (сделано для них UITableView). Хотя я мог бы просто прокручивать, не меняя рамку, и схитрить, изменив расположение подвидов (см. пункт 3), чтобы создать ощущение липкого заголовка.

Как вы думаете, какой компонент лучше всего подходит для этого? Могу ли я использовать UICollectionViewCell, заголовок или дополнительный вид? Если да, то какой? Если нет, не подумаете ли вы об альтернативном способе, который я мог бы использовать для того же поведения (прозрачный заголовок и представление A за представлением коллекции? добавление представления A где-то еще, где, в иерархии представлений?).

Спасибо за вашу помощь!


person Aurelien Porte    schedule 13.02.2014    source источник


Ответы (1)


Взгляните на класс UICollectionReusableView.

Вы можете зарегистрировать свой наконечник в CollectionView как «SupplementaryView» (registerNib: forSupplementaryViewOfKind: withReuseIdentifier:, используйте вид вида UICollectionElementKindSectionHeader)

затем вам нужно реализовать метод collectionView:viewForSupplementaryElementOfKind:atIndexPath: в своем делегате и обязательно вернуть что-то для вида UICollectionElementKindSectionHeader.

и, наконец, вам нужно реализовать метод collectionView:layout:referenceSizeForHeaderInSection: вашего UICollectionViewDelegateFlowLayout, чтобы установить размер вашего заголовка.

Дайте мне знать, если это поможет.

person Thibaut LE LEVIER    schedule 13.02.2014
comment
Спасибо Тибо. Я почти уверен, что динамическое изменение кадра (пункт 4) при прокрутке невозможно, но я мог бы обмануть и заставить подвиды опускаться, чтобы создать ощущение липкого сжимающегося заголовка. - person Aurelien Porte; 14.02.2014
comment
Что меня больше всего беспокоит, так это пункт 2: я не понимаю, как я могу перезагрузить раздел данных без перезагрузки дополнительного представления заголовка. Я могу перезагрузить раздел независимо от других, чтобы я мог вставить другой раздел только для своего заголовка, и в этом новом разделе мне сейчас интересно, что является наиболее гибким между всеми указанными компонентами. - person Aurelien Porte; 14.02.2014
comment
может быть, с reloadItemsAtIndexPaths с заголовком indexPath? - person Thibaut LE LEVIER; 15.02.2014