UICollectionView — пара вопросов

#ios #uicollectionviewlayout

#iOS #uicollectionviewlayout

Вопрос:

Я работаю над приложением, которое использует collecitonview. Это довольно просто, насколько позволяет colletionview…просто отображает массив uiimages в однострочном представлении в горизонтальном направлении. Вот мои вопросы…

  1. Нужно ли мне иметь пользовательский макет потока только для центрирования изображений при прокрутке? Я смог центрировать первое изображение так, как я хочу, используя insetForSectionAtIndex, однако при прокрутке (по горизонтали) изображения выравниваются по левому краю экрана. Я смог исправить это, создав подкласс UICollectionViewFlowLayout и переопределив targetContentOffsetForProposedContentOffset . Тем не менее, я думаю, что должен быть способ выполнить такую простую задачу без использования пользовательского макета. Кроме того, используя этот метод, хотя он центрирует изображения при прокрутке, он не допускает подкачки (без привязки следующего изображения на место), что я бы предпочел. Я думал, что insetForSectionAtIndex будет вызываться при прокрутке каждого изображения, но, похоже, это не так. Есть ли какой-нибудь способ заставить это?

  2. Другой вопрос отчасти связан с первым … как мне разместить ячейки именно там, где я их хочу? У меня изображения центрированы по левому и правому краям, но мне нужно переместить ячейки вверх (- минус) по оси y. Является ли переопределение layoutAttributesForElementsInRect единственным способом сделать это?

Заранее спасибо!

Ответ №1:

В раскадровке, после добавления ImageView в contentView ячейки, используйте это, чтобы центрировать его:

 imageView.center = CGPointMake(cell.contentView.bounds.size.width/2,cell.contentView.bounds.size.height/2);
  

Комментарии:

1. Спасибо… Я добавил это в метод cellForItemAtIndexPath, но это не имело никакого значения. Предполагается ли использовать другой метод?

2. Он должен быть в cellForItemAtIndexPath . Я предполагаю, что вы подключаете ImageView в раскадровке к контроллеру.

3. Это правильно… collectionviewcell и ImageView подключены к раскадровке. Теперь, когда я знаю, что он у меня в нужном месте, я еще немного поиграю с ним. Спасибо!

4. Не уверен, почему сначала это не сработало, но ваш код определенно внес заметный вклад в позиционирование. Однако, делая это своим способом установки центра ImageView, вы просто меняли положение изображения внутри ячейки. Итак, я сделал в основном то же самое для самой ячейки.

5. Извините, я случайно отправил слишком рано. Использование вашего кода в ячейке определенно сработало, но оно поместило все изображения в одну ячейку, а не в отдельные ячейки. Раньше мне не нужно было устанавливать contentSize, но, думаю, мне придется придумать, что для этого нужно установить. Спасибо!