Ответ
UICollectionView — это высоконастраиваемый компонент UIKit для отображения упорядоченной коллекции элементов. В отличие от UITableView, он не привязан к вертикальному списку и может организовывать данные в сетки, карусели, мозаичные раскладки и другие сложные макеты.
Основные компоненты:
- UICollectionViewLayout — Абстрактный класс, определяющий расположение и атрибуты всех ячеек и supplementary views (заголовки, футеры).
UICollectionViewFlowLayout— стандартный подкласс для сетки. - UICollectionViewCell — Ячейка, отображающая контент. Настраивается через subviews или кастомное рисование.
- UICollectionViewDataSource — Протокол для предоставления данных (количество секций, ячеек, самих ячеек).
- UICollectionViewDelegate — Протокол для обработки взаимодействий (выбор, подсветка, отображение).
Базовый пример создания сетки:
// 1. Создание layout
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.itemSize = CGSize(width: 100, height: 100)
layout.minimumLineSpacing = 10
// 2. Создание коллекции
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.translatesAutoresizingMaskIntoConstraints = false
// 3. Регистрация ячейки (для переиспользования)
collectionView.register(MyCustomCell.self, forCellWithReuseIdentifier: "CellID")
// 4. Назначение источника данных
collectionView.dataSource = self
view.addSubview(collectionView)
Преимущество: Отделение данных (DataSource) от их визуального представления (Layout) делает UICollectionView чрезвычайно гибким.