UICollectionView: как определить UICollectionViewLayout, который поддерживает горизонтальную и вертикальную прокрутку?

На данный момент я пытаюсь создать UICollectionView, который должен отображать простой excel-like-spreadsheet с rows и columns. Я полагал, что это должно быть легкой задачей с UICollectionViews. И очень хотелось бы сделать реализацию в UICollectionView, а не в каком-нибудь grid framework.

Но на данный момент я немного зависаю. Я понял, что, к сожалению, я не могу использовать UICollectionViewDelegateFlowLayout, потому что он поддерживает только scrolling в направлении либо horizontally, либо vertically. Но мне нужно scrolling в обе стороны.

Поэтому мне приходится использовать UICollectionViewLayout, но для этого я не нашел хороших примеров, как его использовать. Есть ли у кого-нибудь из вас пример, как создать подкласс UICollectionViewLayout для поддержки rows и columns?

Заранее спасибо.


person AxM    schedule 07.11.2012    source источник


Ответы (4)


UICollectionViewFlowLayout определенно не может - "Макет сетки прокручивается только по одной оси, либо по горизонтали, либо по вертикали".

Это подкласс UICollectionViewLayout. Похоже, вы могли бы создать свой собственный подкласс UICollectionViewLayout и прокручивать в обоих направлениях.

Что вы подразумеваете под страницей, вы хотите сделать пейджинг как scrollview? Мне интересно использовать UICollectionViewFlowLayout в UICollectionView для вертикальной прокрутки, внутри UIScrollView для горизонтальной прокрутки.

person Community    schedule 07.11.2012
comment
Да, я уже знаю, что мне нужно использовать UICollectionViewLayout вместо UICollectionViewFlowLayout... это я уже публиковал в начальном вопросе. Так что ваш комментарий абсолютно не ответил на вопрос, извините. - person AxM; 07.11.2012

Я добавил пример использования пользовательского макета для реализации простой горизонтальной и вертикальной сетки прокрутки здесь https://github.com/neildavis/MyCollectionView

В моем примере используется PSTCollectionView, так как мне нужна была поддержка iOS 5, но его API совместим со встроенным UICollectionView. (На самом деле он использует классы совместимости (PSUICollectionView и т. д.), предоставленные для обеспечения использования UICollectionView на iOS 6 и возврата к использованию PSTCollectionView и т. д. на iOS 5.) Просто удалите префикс «PS» на них, чтобы вернуться к реализации UIKit только для iOS 6. .

person cidered    schedule 25.04.2013

Мне нужно было нечто подобное. Я создал пользовательский CollectionViewLayout.

https://github.com/akashraje/BidirectionalCollectionViewLayout

person akashsr    schedule 02.08.2015
comment
Это сработало блестяще для меня, хотя мне нужно было быть осторожным с написанием компонента, поскольку Xcode не подхватывает его автоматически, а небольшая опечатка заставила меня ходить по кругу целую вечность. - person user1702985; 14.10.2015
comment
Здорово! С помощью этого источника вы также можете реализовать выбор для ряда элементов. - person Nik Kov; 27.10.2016

Ответ, который не требует разбора трех примеров проектов

В вашем подклассе UICollectionViewLayout:

  1. Реализуйте -(CGSize)[collectionViewContentSize] и верните размер, больший по высоте и ширине, чем размер UICollectionView. (Доступно через: self.collectionView.frame.size)
  2. Рассчитайте макет для ваших UICollectionViewCell в пределах размера содержимого, а не размера кадра.

Примечание. Убедитесь, что прокрутка включена в UICollectionView. (Он включен по умолчанию.)

person MechEthan    schedule 08.01.2015