Swift 3 — центральная ячейка UICollectionView с отступами

У меня есть UICollectionView, который прокручивается горизонтально, и я хотел бы, чтобы на экране отображалась одна ячейка за раз.

Я программно устанавливаю ширину и высоту ячейки следующим методом:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath) as! Cell

    let width = collectionView.bounds.size.width - 40
    let height = collectionView.bounds.size.height - 40

    cell.bounds.size = CGSize(width: CGFloat(width), height: CGFloat(height))

    return cell
}

И после того, как я изо всех сил пытался понять, как работать со вставками, интервалами, вставками разделов (как программно, так и в инспекторах в XCode), я не могу понять, что мне нужно установить и где это нужно установить.

Вот схема моего желаемого интервала: введите здесь описание изображения


person Chris Schlitt    schedule 03.01.2017    source источник


Ответы (2)


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
  return CGSize(width: UIScreen.main.bounds.width - 40, height: yourCollectionViewHeight - 40)
}

осталось 20 - добавить Footer Size и Header Size в раскадровку с width = 20

расстояние между ячейками - добавить Minimum Spacing в раскадровку = 40

введите здесь описание изображения

Я мог допустить некоторые ошибки, и вы не получите точно свой макет, но я надеюсь, что вы поняли идею.

person JuicyFruit    schedule 03.01.2017

  1. Если вы хотите, чтобы на экране одновременно отображалась одна ячейка, важно, чтобы вы включили пейджинг для своего CollectionView. Вы можете сделать это быстро, как показано ниже:
collectionView.isPagingEnabled = true
  1. Теперь согласуйте свой класс ViewController с UICollectionViewDelegateFlowLayout и реализуйте его метод sizeForItemAt indexPath, который возвращает CGSize для вашей ячейки представления коллекции. Например:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {    
    return CGSize(width: 200, height: 200)
}
person Ashvini    schedule 27.09.2018