В настоящее время я использую UICollectionView
сетку пользовательского интерфейса, и она отлично работает. Однако я бы хотел включить горизонтальную прокрутку. Сетка поддерживает 8 элементов на странице, и когда общее количество элементов, скажем, 4, элементы должны быть расположены следующим образом с включенным горизонтальным направлением прокрутки:
0 0 x x
0 0 x x
Здесь 0 -> Элемент коллекции и x -> Пустые ячейки
Есть ли способ выровнять их по центру, например:
x 0 0 x
x 0 0 x
Чтобы контент выглядел более чистым?
Также я ожидаю, что приведенная ниже компоновка также может быть решением.
0 0 0 0
x x x x
minimumInteritemSpacing
указывает только их минимум.return UIEdgeInsetsMake(0, 100, 0, 100);
. Если есть лишнее пространство, представление коллекции расширит промежуточный интервал, поэтому вам нужно убедиться, что LeftInset + CellWidth * Ncells + CellSpacing * (Ncells-1) + RightInset = CollectionViewWidthДля тех, кто ищет решение для выровненных по центру ячеек коллекции с динамической шириной , как и я, я закончил тем, что изменил ответ Ангела для версии с выравниванием по левому краю, чтобы создать подкласс с выравниванием по центру для
UICollectionViewFlowLayout
.CenterAlignedCollectionViewFlowLayout
источник
guard let superArray = super.layoutAttributesForElementsInRect(rect) else { return nil } guard let attributes = NSArray(array: superArray, copyItems: true) as? [UICollectionViewLayoutAttributes] else { return nil }
interItemSpacing
использую значение по умолчаниюminimumInteritemSpacing
.Лучшие решения здесь не работали для меня из коробки, поэтому я придумал это, которое должно работать для любого горизонтального представления коллекции с прокруткой с макетом потока и только одним разделом:
источник
Динамически вычислять вставки легко, этот код всегда будет центрировать ваши ячейки:
источник
Как и другие ответы, это динамический ответ, который должен работать для ячеек статического размера. Единственное изменение, которое я сделал, это то, что я положил прокладку с обеих сторон. Если бы я этого не делал, у меня были проблемы.
Цель-C
Swift
Кроме того , если вы все еще испытываете проблемы, убедитесь , что вы установили как
minimumInteritemSpacing
иminimumLineSpacing
то же значение , так как эти значения , как представляются, связаны между собой .источник
Поместите это в делегат представления коллекции. Он учитывает больше основных настроек макета потока, чем другие ответы, и поэтому является более общим.
быстрая версия (спасибо g0ld2k):
источник
totalCellWidth
должно бытьcellWidth*cellCount + spacing*(cellCount-1)
.Мое решение для ячеек коллекции статического размера, которые должны иметь отступы слева и справа -
источник
У меня есть панель тегов в моем приложении, в которой используется символ
UICollectionView
&UICollectionViewFlowLayout
, с выравниванием одной строки ячеек по центру.Чтобы получить правильный отступ, вы вычитаете общую ширину всех ячеек (включая интервал) из ширины вашей
UICollectionView
и делите на два.Проблема в этой функции -
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
называется раньше ...
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
... поэтому вы не можете перебирать ячейки, чтобы определить общую ширину.
Вместо этого вам нужно снова рассчитать ширину каждой ячейки, в моем случае я использую,
[NSString sizeWithFont: ... ]
поскольку ширина моей ячейки определяется самим UILabel.источник
interSpacing
?interSpacing
это просто константа в моем коде, который определяет место у меня между UICollectionViewCellsВ Swift следующее будет распределять ячейки равномерно, применяя правильное количество отступов по сторонам каждой ячейки. Конечно, вам нужно сначала узнать / установить ширину вашей ячейки.
источник
Swift 2.0 У меня отлично работает!
Где: screenWight : в основном это ширина моей коллекции (полная ширина экрана) - я сделал константы: let screenWight: CGFloat = UIScreen.mainScreen (). Bounds.width, потому что self.view.bounds каждый раз показывает 600 - из элементов SizeClasses - массив ячеек 50 - моя ручная ширина ячейки 10 - мое расстояние между ячейками
источник
Вы можете использовать https://github.com/keighl/KTCenterFlowLayout вот так:
источник
Не уверен, что это ново в Xcode 5 или нет, но теперь вы можете открыть инспектор размера через Interface Builder и установить там вставку. Это избавит вас от необходимости писать собственный код, чтобы сделать это за вас, и должно резко увеличить скорость, с которой вы найдете правильные смещения.
источник
Другой способ сделать это - установить
collectionView.center.x
, например:В данном случае, только соблюдая правильную вставку, которая работает для меня.
источник
Основываясь на ответе user3676011, я могу предложить более подробный с небольшой поправкой. Это решение отлично работает на Swift 2.0 .
Была проблема в
где следует
-1
упомянуть дополнительно .источник
Вот как я получил представление коллекции, которое было выровнено по центру с фиксированным интервалом между элементами.
источник
Рабочая версия ответа kgaidis Objective C с использованием Swift 3.0:
источник
Вот мое решение с несколькими предположениями:
Не стесняйтесь приспосабливаться к своим потребностям.
Макет по центру с переменной шириной ячейки:
Результат:
источник
Вот как это можно сделать, и он отлично работает
источник