Найти тему
Learn Swift

Второй вариант создания CollectionView

Первый вариант тут 👉 https://zen.yandex.ru/media/id/6005d895f46d284abbb641fe/collectionview-swift-primery-600870abda2b006973ccf038

Будем использовать проект EnterInTableView.

В Main.storyboard выбрем пустой ViewController и добавим туда коллекцию

Закрепим constraint коллекции

-2

Удалим автоматически созданную ячейку из коллекции в Main.storyboard выбираем View Controller в нем ячейку и стираем ее получится вот так:

Вот так после удаления должно быть
Вот так после удаления должно быть

У нас выбран View Controller в сториборде, через Ассистента откроем к нему, выберем коллекцию и от нее протянем аутлет.

-4

Протянем @IBOutlet weak var collectionView: UICollectionView!

-5

Для работы в классе ViewController унаследованного от UIViewController нам понадобится прописать расширение, что ViewController наследуется еще от UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout.

-6

В расширении extension ViewController: UICollectionViewDataSource {} он выдает ошибку что у нас не достаточно методов, т.е какие-то методы обязательно должны присутствовать в данном расширении если нажать на красный кружок он говорит что ViewController код не соответсвует протоколу UICollectionViewDataSource и предложит это исправить Fix

нажимаем Fix
нажимаем Fix

У нас добавились методы numberOfItemsInSection - количество ячеек в секции и cellForItemAt - настройка ячейки по индексу. В первом методе нужно вернуть число во втором ячейку коллекции.(настроим методы далее)

-8

Все еще работаем в ViewController.swif. Зарегистрируем нашу существующую ячейку в коллекции, для этого добавим код во viewDidLoad:

-9

Так же добавим нашу функцию создания массива и вызовем ее во viewDidLoad :

-10

Вернемся к методам UICollectionViewDataSource и заполним их данными:

-11

Если запустим проект то будем видеть экран CollectionViewController, который был в первой части. Для того чтобы видеть оба экрана с разными коллекциями будем использовать TabBarController.

  • Откроем Main.storyboard найдем TabBarController и перетащим его в свободное место.
  • Удалим лишние View Item Scene 1 и 2.
  • После удаления протянем новые связи от TabBarController к ViewController и CollectionViewController. (Ctr и потянули мышкой голубую линию от tabbar к существующим контроллерам с коллекциями по очереди )
  • в появившемся окошке выбираем view controllers
  • В итоге получаем tabbar с двумя Item
  • Изменим инициализируемый контроллер, перетащим стрелочку к TabBarController
  • запустим проект

Первый экран ViewController оказался пустым. Если поставим точки остановки во ViewController.swift и запустим проект заново то увидим что он на них не остановился, поймем что он не зашел в методы связанные с настройкой коллекции. Это связно с тем что нам необходимо сказать коллекции что ViewController подписан на методы настройки коллекции, self = ViewController( картинка 2).

  • Запустим проект еще раз и он остановится на наших точках остановки.
  • Отключим их и продолжим .
  • Теперь на первом вью тоже есть ячейки.

Настроим чтобы наша коллекция двигалась горизонтально:

 в Main.storyboard выбираем View Controller - CollectionView в Атрибутах находим Scroll Direction - Horisontal
в Main.storyboard выбираем View Controller - CollectionView в Атрибутах находим Scroll Direction - Horisontal

Настроим размер ячеек в ViewController. Для этого отключим автоматический размер ячеек:

в Main.storyboard выбираем View Controller -  Size Inspector - Estimated Size - None
в Main.storyboard выбираем View Controller - Size Inspector - Estimated Size - None

Добавим следующий код во ViewController.swift в расширении extension ViewController: UICollectionViewDelegateFlowLayout {}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
CGSize(width: 170, height: 100)
}
-17

Запустим проект и увдим изменения в коллекции. Данный способ работы с коллекцией нужен когда у вас на экране есть не только элемент коллекции но и другие, можно задать любой размер коллекции ширину и высоту.

Попробуйте поменять настройки constraint коллекции и размеров ячейки ней.

Всем добра!😊