Подтвердить что ты не робот

Прокрутка UICollectionView в обоих направлениях

Я сделал UICollectionView с вертикальной прокруткой.

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

Однако это не работает. Когда ширина ячейки меньше ширины экрана, она работает. Означает ли это, что ширина вертикальной ширины не может быть больше ширины экрана?

То же самое для горизонтальной прокрутки, но тогда высота CollectionView ограничена высотой экрана.

Есть ли способ заставить его работать?

4b9b3361

Ответ 2

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

Когда вы заглядываете в панель рассказов, вы можете добавить UICollectionView в UIScrollView. Установите для прокрутки прокрутку по горизонтали и UICollectionView для прокрутки по вертикали. Затем установите для параметра UICollectionView значение "Задержка содержимого", чтобы они прошли через UIScrollView и не думали, что вы пытаетесь прокрутить коллекцию.

Когда вы настроите UICollectionView, установите его размер и размер ячеек, чтобы быть тем, кем вы на самом деле хотите (более широко, чем фактический экран) и соответствующим образом выложите их.

Теперь в содержащем UIViewController поместите этот код в жизненный цикл представления

    - (void)viewDidLayoutSubviews {
        self.myScrollView.contentSize = self.myCollectionView.frame.size;
    }

Это буквально все, что вам нужно сделать, чтобы выполнить то, что вы описываете. Теперь ваше scrollview должно позволить вам прокручивать по горизонтали, чтобы просмотреть всю вашу ячейку, и ваша коллекцияView должна прокручиваться по вертикали через ваши ячейки.

Счастливое программирование.

Ответ 3

Мне пришлось пересмотреть его недавно. Я создал здесь демонстрационный проект: https://github.com/izotx/ScrollableCollectionView

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

Ответ 4

Я не уверен, что понял вашу проблему.

Но если вы создали собственный макет, убедитесь, что вы внедрили:

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;

и что ваш размер и размер атрибутов макета заданы с правильными значениями для вашего указателя "большой ячейки".

Также убедитесь, что вы внедрили:

- (CGSize) collectionViewContentSize;

Этот метод возвращает contentSize коллекции View. Если contentSize.width > youAppFrame.width, вы должны иметь горизонтальную прокрутку. То же самое для вертикальной и вертикальной прокрутки.

Также убедитесь, что ваша коллекцияView позволяет прокручивать и что ваш макет подготовлен правильно, используя:

- (void)prepareLayout

Кстати, для вашего макета вы перегрузили UICollectionViewLayout или UICollectionViewFlowLayout?

Ответ 5

Прежде чем вы сможете сделать это, вы ДОЛЖНЫ использовать другой тип макета. Макет потока представляет его элементы как список, и он охватывает эти элементы в ячейках на основе доступной ширины. Если вы хотите иметь горизонтальную и вертикальную прокрутку, вам нужно как-то указать количество столбцов для вашей сетки. FlowLayout этого не имеет. Простое решение состоит в том, чтобы сделать подкласс UICollectionViewLayout и переопределить collectionViewContentSize, чтобы он перенастроил ширину = на добавленную сумму ширины ячеек одной строки (это нужно знать, сколько колонок вам нужно), плюс любое дополнительное расстояние между их. Это будет нормально работать, если ваши ячейки имеют одинаковый размер для столбца, аналогичный сетке.