Dynami c количество элементов в UICollectionViewCompositionalLayout возможно? - PullRequest
0 голосов
/ 18 марта 2020

Я хочу иметь несколько разделов в моем UICollectionView. В одном должны быть предметы, которые содержат текст. С подходом 'classi c' collectionView Количество элементов, отображаемых в одной строке, зависит от ширины элемента. CollectionView добавляет новую строку, только если элементы не помещаются в одну строку. Поэтому в некоторых строках может быть 5 элементов, а в некоторых - 3. Пример:

This is what I want

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

Возможно ли это даже с UICollectionViewCompositionalLayout?

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

TLDR

Если вы используете только один объект NSCollectionLayoutItem в вашем композиционном макете (который выглядит так, как вы), то создайте группу макетов, используя один из этих методов (в зависимости от в каком направлении вы хотите, чтобы макет проходил:

NSCollectionLayoutGroup.horizontal(layoutSize:subitems:)
NSCollectionLayoutGroup.vertical(layoutSize:subitems:)

Поместите объект NSCollectionLayoutItem в качестве единственного элемента в массиве subItems.

Когда выложено представление коллекции, число элементы, которые вы указываете в (_:numberOfItemsInSection:) UICollectionViewDataSource, будут использоваться для компоновки ваших элементов.


немного длиннее

Я предполагаю, что вы имеете в виду такие методы, как NSCollectionLayoutGroup.horizontal(layoutSize:subitem:count:). Если это так, то вы можете неправильно понимать, что означает здесь параметр count.

В ситуации, когда вы используете комбинацию различных объектов NSCollectionLayoutItem (с различными размерами / макетами), count параметр здесь означает, сколько из этого элемента вы хотите в этой группе для макета .

Когда загружено представление коллекции / после перезагрузки, все значения, которые вы указали для UICollectionViewDataSource (_:numberOfItemsInSection:), будут по-прежнему отображаться - если это число больше, чем количество, указанное в вашем композиционном макете, то будут созданы новые группы (в соответствии с вашим макетом) для размещения дополнительных элементов.

0 голосов
/ 20 апреля 2020

Ну, во-первых, спасибо, что нашли время.

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

вот мой код


    func generateLayout() -> UICollectionViewLayout {
        let itemSize = NSCollectionLayoutSize(
            widthDimension: .estimated(100),
            heightDimension: .absolute(20))

        let fullPhotoItem = NSCollectionLayoutItem(layoutSize: itemSize)

        let groupSize = NSCollectionLayoutSize(
            widthDimension: .fractionalWidth(1),
            heightDimension: .estimated(20))

        let group = NSCollectionLayoutGroup.horizontal(
            layoutSize: groupSize,
            subitem: fullPhotoItem,
            count: 1)

        let section = NSCollectionLayoutSection(group: group)
        let layout = UICollectionViewCompositionalLayout(section: section)
        return layout
    }
...