it-roy-ru.com

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

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

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

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

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

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

19
rbmanian75

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

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

3
rbmanian75

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

Когда вы выкладываете свое представление на доске рассказов, вы можете поместить свой UICollectionView встроенным в UIScrollView. Настройте scrollview для горизонтальной прокрутки и UICollectionView для вертикальной прокрутки. Затем установите для UICollectionView.delaysContentTouches значение true, чтобы касания проходили через переменную UIScrollView и не думали, что вы пытаетесь прокрутить представление коллекции.

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

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

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

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

Удачного программирования.

13
johnrechd

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

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

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

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

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

- (CGSize) collectionViewContentSize;

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

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

- (void)prepareLayout

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

0
CitronEvanescent

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

0
Radu Simionescu