Как установить интервал между ячейками в разделе UICollectionView
? Я знаю, что есть свойство, которое minimumInteritemSpacing
я установил на 5.0, но интервал не отображается 5.0. Я реализовал метод делегирования потока.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
до сих пор я не получаю желаемого результата. Я думаю, что минимальный интервал. Нет ли способа установить максимальный интервал?
ios
objective-c
uicollectionview
Вишал Сингх
источник
источник
Ответы:
Я знаю, что тема старая, но в случае, если кому-то все еще нужен правильный ответ, здесь вам нужно:
Добавьте реализацию следующим образом:
где MaximumSpacing может быть установлено любое значение, которое вы предпочитаете. Этот трюк гарантирует, что пространство между ячейками будет ТОЧНО равно MaximumSpacing!
источник
mutableCopy
: вы не изменяете содержимое массива, а изменяете объекты внутри него.if
И дополнительное условие:if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x) {
Поддерживая первоначальный вопрос. Я пытался получить расстояние до 5px,
UICollectionView
но это не работает, а также сUIEdgeInsetsMake(0,0,0,0)
...На UITableView я могу сделать это, непосредственно указав координаты x, y в строке ...
Вот мой код UICollectionView:
Обновление: Решил мою проблему, с помощью следующего кода.
ViewController.m
источник
Используя горизонтальный макет потока, я также получил интервал в 10 точек между ячейками. Чтобы удалить интервал мне нужно было установить
minimumLineSpacing
так же как иminimumInterItemSpacing
на ноль.Кроме того, если все ваши ячейки имеют одинаковый размер, проще и эффективнее установить свойство в макете потока напрямую, а не использовать методы делегата.
источник
minimumInteritemSpacing
. Просто установкаminimumLineSpacing = 0
на моем горизонтальном макете убрала горизонтальный интервал между элементами.Помните, это минимальный интервал между строками, а не минимальный интервал между элементами или ячейкой. Потому что направление прокрутки вашего collectionView - ГОРИЗОНТАЛЬНОЕ .
Если он вертикальный, то вам нужно установить пространство ячеек или пространство между элементами для горизонтального пространства между ячейками и межстрочный интервал для вертикального пространства между ячейками.
Версия Objective-C
Swift версия:
источник
Попробуйте этот код, чтобы убедиться, что у вас есть интервал 5 пикселей между каждым элементом:
источник
Свифт версия самого популярного ответа. Пространство между клетками будет равно
cellSpacing
.источник
Я нашел очень простой способ настроить расстояние между ячейками или строками с помощью IB.
Просто выберите UICollectionView из раскадровки / Xib-файла и щелкните в инспекторе размеров, как показано на рисунке ниже.
Для настройки пространства программно используйте следующие свойства.
1) Для установки пространства между рядами.
2) Для установки пространства между элементами / ячейками.
источник
Пожалуйста, обратите внимание на имя свойства MinilInterItemSpacing . Это будет минимальный интервал между элементами, а не точный интервал. Если вы установите в качестве значения MaximumInterItemSpacing какое-то значение, вы можете быть уверены, что интервал не будет меньше этого значения. Но есть шанс получить более высокое значение.
На самом деле расстояние между элементами зависит от нескольких факторов itemSize и sectionInset . Представление коллекции динамически размещает содержимое на основе этих значений. Таким образом, вы не можете гарантировать точное расстояние. Вы должны сделать некоторые пробы и ошибки с sectionInset и minimumInterItemSpacing .
источник
Ответ для Swift 3.0, Xcode 8
1. Убедитесь, что вы установили делегат представления коллекции
2. Реализация протокола UICollectionViewDelegateFlowLayout , а не UICollectionViewDelegate.
источник
Простой код для пробелов
источник
Проголосовали ответ (а также версия скор ) есть небольшой вопрос: будет большой интервал справа.
Это связано с тем, что компоновка потока настроена так, чтобы сделать интервал между ячейками точным, а поведение с плавающей точкой осталось .
Мое решение состоит в том, чтобы манипулировать вставкой сечения, так чтобы сечение было выровнено по центру, но расстояние точно соответствовало указанному.
На скриншоте ниже, расстояние между предметами и линиями составляет ровно 8pt, в то время как сечение слева и справа будет больше, чем 8pt (чтобы выровнять его по центру):
Swift код как таковой:
источник
let n = Int((containerWidth + minItemSpacing)/((itemWidth+minItemSpacing)))
Определите
UICollectionViewDelegateFlowLayout
протокол в вашем заголовочном файле.Реализуйте следующий метод
UICollectionViewDelegateFlowLayout
протокола следующим образом:Нажмите здесь, чтобы увидеть документацию Apple о
UIEdgeInsetMake
методе.источник
Подход раскадровки
Выберите CollectionView в вашей раскадровке и перейдите к инспектору размера и установите минимальный интервал для ячеек и линий равным 5
Swift 5 программно
источник
Если вы хотите изменить интервал, не затрагивая фактический размер ячейки, это решение подойдет мне лучше всего. #xcode 9 # tvOS11 # iOS11 #swift
Таким образом, в UICollectionViewDelegateFlowLayout , изменения реализуют следующие методы, хитрость заключается в том, что нужно использовать оба из них, и документация на самом деле не указывала мне думать в этом направлении. : D
источник
Я использую monotouch, поэтому имена и код будут немного отличаться, но вы можете сделать это, убедившись, что ширина представления коллекции равна (x * ширина ячейки) + (x-1) * MinimumSpacing с x = amount ячеек в ряду.
Просто выполните следующие шаги на основе вашего MinimumInteritemSpacing и ширины ячейки
1) Мы рассчитываем количество элементов в строке на основе размера ячейки + текущие вставки + минимальный интервал
2) Теперь у вас есть вся информация, чтобы рассчитать ожидаемую ширину для представления коллекции
3) Таким образом, разница между текущей шириной и ожидаемой шириной
4) Теперь отрегулируйте вставки (в этом примере мы добавляем их справа, чтобы левая позиция представления коллекции осталась прежней
источник
У меня горизонтальный
UICollectionView
и подклассUICollectionViewFlowLayout
. Представление коллекции имеет большие ячейки и отображает только одну строку за раз, а представление коллекции соответствует ширине экрана.Я попробовал ответ iago849, и он сработал, но потом я узнал, что мне даже не нужен его ответ. По какой-то причине установка
minimumInterItemSpacing
ничего не делает. Расстояние между моими предметами / ячейками может полностью контролироватьсяminimumLineSpacing
.Не уверен, почему это работает таким образом, но это работает.
источник
Я наткнулся на аналогичную проблему, как OP. К сожалению, принятый ответ не сработал для меня, так как содержание
collectionView
не будет правильно центрировано. Поэтому я пришел к другому решению, которое требует, чтобы все элементыcollectionView
были одинаковой ширины , что, как представляется, имеет место в вопросе:Этот код гарантирует, что возвращаемое значение
...minimumInteritemSpacing...
будет точным интервалом между каждымcollectionViewCell
и, кроме того, гарантирует, что все ячейки будут сосредоточены вcollectionView
источник
Приведенное выше решение от vojtech-vrbka является правильным, но оно выдает предупреждение:
Следующий код должен это исправить:
источник
Версия Swift 3
Просто создайте подкласс UICollectionViewFlowLayout и вставьте этот метод.
источник
Я попробовал ответ iago849, и это сработало.
Swift 4
Вот ссылка на проект GitHub. https://github.com/vishalwaka/MultiTags
источник
Предыдущие версии не работали с разделами> 1. Поэтому мое решение было найдено здесь https://codentrick.com/create-a-tag-flow-layout-with-uicollectionview/ . Для ленивых:
источник
У меня проблема с принятым ответом, поэтому я обновил его, это работает для меня:
.час
.m
источник
Мое решение в
Swift 3
межстрочных интервалах, как в Instagram:Как обнаружить устройство программно: https://stackoverflow.com/a/26962452/6013170
источник
Что ж, если вы создаете горизонтальный вид коллекции, чтобы оставить пространство между ячейками, вам нужно установить свойство
minimumLineSpacing
.источник
Попробуйте поиграть с этим методом:
источник