1

Я пытаюсь создать пользовательский интерфейс, как показано ниже.Интервал между представлениями коллекции ui

3 Column Layout

Для этой цели я использую UICollectionView и FlowLayout.

Для показывая первую ячейку с полной шириной и остальные ячейки в 3 колонки, я реализовал sizeForItemAtIndexPath: и minimumInteritemSpacingForSectionAtIndex методы:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
{ 
    var cellSize = CGSizeZero 

    if indexPath.item == 0 
    { 
     let width = self.cvMedia.frame.width - 20 
     let height = (width * 9)/16 
     cellSize = CGSize(width: width, height: height) 
    } 
    else 
    { 
     let width = self.cvMedia.frame.width/3 - 20 
     let height = (width * 16)/9 
     cellSize = CGSize(width: width, height: height) 
    } 

    return cellSize 
} 



func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat 
{ 
    return 20.0 
} 

Но я получаю следующий выход в iPhone 6SPlus и iPhone 6Plus :

Actual Outcome

Я попытался, изменив пункт расстояние от 20 до 19 лет, и он работал на симуляторе, но на реальном устройстве он все еще показывает такое же поведение. Если я изменяю значения интервала, я получаю правильный вывод на некоторых версиях устройства и не работаю над некоторыми версиями. Я могу добавить проверку версии устройства и на основании этого могу вернуть значение. Но это не элегантное решение, и оно будет ломаться в будущих версиях. Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо.

+0

Вы удалили врезки по умолчанию из раскадровки? – Happiehappie

+0

@Happiehappie: Нет, я ничего не менял в раскадровке. –

ответ

0

Проверить эту image и изменить значения интервалов мин до 0 для обеих клеток и линий

+0

Это не сработало, но у него проблемы. –

0

Вы должны использовать ширину Представление коллекции в качестве параметра при создании этого макета.

Например,

  1. Вам нужно 3 ячеек, чтобы соответствовать вид.
  2. Клетки должны иметь промежуток 20pt между ними.

Решение:

Вычислить размер ячейки во время выполнения либо на viewWillAppear() или cellForRowAtIndexPath()

Сценарий:

Ширина устройства 320pt. Ширина Collectionview составляет 300pt (расстояние 10pt L & R) Расстояние между ячейками: 20pt. Необходима ячейка 3! Размер ячейки:?

Now..Start рассчитывается в любом из способов.

клетки Интервал = (3-1) * 20 = 2 * 20 = 40pt

Оставшейся коллекция ширина вида = 300ПТ - 40pt = 260pt

Сотового размер = 260pt/3 = 86,667 пт. (86pt apprx).

В Код:

cellWidth = (collectionView?.bounds.width - minimumSpacing * (numberOfCellsInARow - 1))/numberOfCellsInARow 

Кроме того, это дает только cellWidth. Вам также нужен cellHeight. Возможно, у вас уже есть соотношение сторон для ячейки. Используя это, также вычислите cellHeight.

С наилучшими пожеланиями,
Суман Адхикари