Ответ
UITableView и UICollectionView — компоненты для отображения коллекций данных, но с разной степенью гибкости.
UITableView:
- Одно измерение: Строго вертикальный или горизонтальный список строк.
- Простая структура: Секции и строки.
- Встроенные стили ячеек:
.default,.subtitle,.value1. - Идеален для: Списков настроек, контактов, лент новостей — где нужен простой линейный список.
UICollectionView:
- Два измерения: Свободная компоновка через
UICollectionViewLayout. - Высокая гибкость: Сетки, карусели, masonry-раскладки, кастомные анимации.
- Делегат layout'a:
UICollectionViewDelegateFlowLayoutдля контроля размера и отступов. - Идеален для: Галерей, фотоальбомов, каталогов товаров, кастомных интерфейсов.
Пример создания CollectionView с FlowLayout:
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.itemSize = CGSize(width: 100, height: 100)
layout.minimumLineSpacing = 10
layout.sectionInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
let collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: layout)
collectionView.register(MyCell.self, forCellWithReuseIdentifier: "Cell")
collectionView.dataSource = self
collectionView.delegate = self
| Ключевые архитектурные различия: | Аспект | UITableView | UICollectionView |
|---|---|---|---|
| Layout | Фиксированный (строки) | Плагинная система (UICollectionViewLayout) |
|
| Ячейка | UITableViewCell |
UICollectionViewCell (более гибкая) |
|
| Reuse | dequeueReusableCell(withIdentifier:) |
dequeueReusableCell(withReuseIdentifier:for:) (требует IndexPath) |
|
| Заголовки/футеры | viewForHeaderInSection |
Через supplementary views (UICollectionReusableView) |
Совет: UICollectionView с UICollectionViewCompositionalLayout (iOS 13+) позволяет создавать сложные адаптивные интерфейсы, которые раньше требовали кастомных layout.