UICollectionView: одна строка или столбец
Я хочу использовать UICollectionView
для отображения горизонтального прокручиваемого списка миниатюр, однако я хочу, чтобы это была одна строка. На другом представлении я показываю миниатюры в UICollectionView
, но этот прокручивает по вертикали и в одном столбце.
В настоящее время способ, которым я это делаю, - это изменить размер представления коллекции, чтобы он был достаточно большим для одного элемента, поэтому он автоматически работает и работает, но теперь я имею дело с элементами с переменным размером, поэтому он не работать больше.
Как сделать UICollectionView
отображение одной строки или столбца?
Ответы
Ответ 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]()