В чем разница между UITableView и UICollectionView в UIKit?

«В чем разница между UITableView и UICollectionView в UIKit?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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.