Каковы основные различия между таблицей (UITableView) и коллекцией (UICollectionView) в iOS?

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

Ответ

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

Ключевые различия:

  1. Макет (Layout):

    • UITableView: Строгий вертикальный список. Поддерживает обычный (plain) и сгруппированный (grouped) стили.
    • UICollectionView: Произвольный макет. Задается отдельным объектом UICollectionViewLayout (например, UICollectionViewFlowLayout для сетки или кастомный).
  2. Оси и направление:

    • UITableView: Только вертикальная прокрутка.
    • UICollectionView: Вертикальная, горизонтальная или кастомная (через layout).
  3. Ячейки (Cells):

    • UITableView: Предопределенные стили ячеек (.default, .subtitle) или полностью кастомные.
    • UICollectionView: Только кастомные ячейки. Полный контроль над вёрсткой.
  4. Дополнительные view (Заголовки/Подвалы):

    • UITableView: Встроенная поддержка заголовков и подвалов для секций.
    • UICollectionView: Реализуются через supplementary views (дополнительные виды), которые также настраиваются в layout.

Когда что использовать:

  • UITableView – для простых линейных списков (меню, контакты, лента новостей).
  • UICollectionView – для сложных сеток (галерея фото), нелинейных макетов (Pinterest), горизонтальных каруселей.

Пример настройки коллекции:

let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.itemSize = CGSize(width: 100, height: 100)
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)