Каковы основные различия между таблицей (UITableView) и коллекцией (UICollectionView) в 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)

Ответ 18+ 🔞

Ага, слушай, вот есть у нас два таких контрола — UITableView и UICollectionView. Оба, в принципе, для списков, да? Но один — как солдат в строю, всё по уставу, а второй — как художник-анархист, ему лишь бы холст дали.

Ключевые отличия, блядь:

  1. Макет (Layout):

    • UITableView: Это, сука, строгий вертикальный список. Ты либо обычный список, либо сгруппированный — и всё, пиздец. Никаких вольностей. Как линейка, блядь.
    • UICollectionView: А вот это уже полная свобода, ёпта! Там макет задаётся отдельной хуйнёй под названием UICollectionViewLayout. Хочешь сетку — UICollectionViewFlowLayout, хочешь пинтерест — пиши свой кастомный. Вообще, овердохуища возможностей.
  2. Куда крутить можно:

    • UITableView: Только вверх-вниз, вертикально. По-другому — нихуя.
    • UICollectionView: Да куда угодно, блядь! Вертикально, горизонтально, по диагонали, если layout такой извращенец. Полный карт-бланш.
  3. Ячейки (Cells):

    • UITableView: Ну, там есть какие-то предустановленные стильчики, но по сути — тоже кастомные. Но подход старый, консервативный.
    • UICollectionView: Тут, сука, только кастомные ячейки. Полный контроль над вёрсткой внутри. Делай что хочешь, хоть кнопку в форме хуя впили.
  4. Заголовки и подвалы:

    • 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)

Вот и вся магия. А дальше — твори, выёбывайся, блядь. Главное — не запутайся в этих layout'ах, а то можно, блядь, с ума сойти.