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

UICollectionView: одна строка или столбец

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

В настоящее время способ, которым я это делаю, - это изменить размер представления коллекции, чтобы он был достаточно большим для одного элемента, поэтому он автоматически работает и работает, но теперь я имею дело с элементами с переменным размером, поэтому он не работать больше.

Как сделать UICollectionView отображение одной строки или столбца?

4b9b3361

Ответ 1

Я предполагаю, что вы используете встроенный Flow Layout. Однако для вашего случая вы должны создать пользовательский UICollectionView Layout. Сделайте его подклассом UICollectionViewFlowLayout и добавьте этот код в метод init:

- (id)init {
    if ((self = [super init])) {
        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
        self.minimumLineSpacing = 10000.0f;
    }
    return self; 
}

minimumLineSpacing - это ключ к тому, что он имеет одну строку.

Надеюсь, это поможет!

Ответ 2

Я обнаружил, что установка minimumLineSpacing просто сделала мою область прокрутки действительно большой и установила завершение minimumInteritemSpacing=big, сохраняя элементы в одной строке прокрутки или столбце, в центре которой находится collectionview.

Ответ 3

Не существует реальной причины для подкласса, если вы можете доверять типу cast.

((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f;

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

То же самое относится к направлению прокрутки.

Ответ 4

При инициализации UICollectionView передайте следующий UICollectionViewFlowLayout в параметре init.

Примечание. Вам не нужно создавать подкласс UICollectionViewFlowLayout

var collectionViewFlowControl = UICollectionViewFlowLayout()
collectionViewFlowControl.scrollDirection = UICollectionViewScrollDirection.Horizontal

Для 0 px Расстояние между ячейками:

collectionViewFlowControl.minimumInteritemSpacing = 0;
collectionViewFlowControl.minimumLineSpacing = 0;

collectionView = UICollectionView(frame: CGRectMake(0, 0, self.view.frame.size.width, 120), collectionViewLayout: collectionViewFlowControl)

Ответ 5

Для Swift 3

let flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSize(width: UIScreen.main.bounds.width/2-10, height: 190)
flowLayout.sectionInset = UIEdgeInsetsMake(0, 5, 0, 5)
flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal
flowLayout.minimumInteritemSpacing = 0.0
self.gCollectionView.collectionViewLayout = flowLayout

Ответ 6

 UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
 [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];

 layout.minimumInteritemSpacing = 0;
 layout.minimumLineSpacing = 0;


 blendEffectCollectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 95, 320, 60) collectionViewLayout:layout];
 [blendEffectCollectionView setDataSource:self];
 [blendEffectCollectionView setDelegate:self];
 [blendEffectCollectionView registerClass:[BlendModeCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
 [blendEffectCollectionView setBackgroundColor:[UIColor clearColor]];

 [bottomActivityView addSubview:blendEffectCollectionView];

Ответ 7

Я хотел, чтобы один столбец был выровнен по левому краю, а остальные ответы мне не помогли.

Итак, вот мое очень простое решение для одного столбца, выровненного по левому краю:

class GCOneColumnLeftAlignedFlowLayout: UICollectionViewFlowLayout {
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributes = super.layoutAttributesForElements(in: rect)

        var y: CGFloat = sectionInset.top
        attributes?.forEach { layoutAttribute in
            layoutAttribute.frame.origin.x = sectionInset.left
            layoutAttribute.frame.origin.y = y
            y = y + layoutAttribute.frame.height + minimumLineSpacing
        }

        return attributes
    }
}

Вы также должны установить что-то вроде

estimatedItemSize = CGSize(width: 120, height: 40)

Не забудьте убрать строку

minimumLineSpacing = big number

Из других решений.

Надеюсь, что это полезно, потому что это совершенно другой подход по сравнению с другими ответами.

Ответ 8

Это сработало для меня, чтобы получить одну строку ячеек независимо от высоты CollectionView.

Storyboard UICollectionView