С какими компонентами для отображения коллекций (UI Collections) в iOS вы работали?

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

Ответ

Имею опыт работы с основными компонентами для отображения списков и сеток в iOS:

  • UITableView — для линейных, вертикальных списков. Опыт включает:
    • Кастомные ячейки (UITableViewCell).
    • Динамическую высоту ячеек (UITableView.automaticDimension).
    • DiffableDataSource и UITableViewDiffableDataSource для безопасных анимированных обновлений.
  • UICollectionView — для сложных сеток, каруселей, нелинейных layouts. Опыт включает:
    • UICollectionViewFlowLayout для простых сеток.
    • UICollectionViewCompositionalLayout (iOS 13+) для создания сложных, адаптивных интерфейсов с разными типами секций.
    • Кастомные UICollectionViewLayout.
  • UIStackView — для простой статической компоновки групп вьюх. Часто комбинируется с коллекциями для создания заголовков или футеров.

Пример UICollectionViewCompositionalLayout для сетки:

let layout = UICollectionViewCompositionalLayout { (sectionIndex, layoutEnvironment) -> NSCollectionLayoutSection? in
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.5),
                                          heightDimension: .fractionalHeight(1.0))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)
    item.contentInsets = NSDirectionalEdgeInsets(top: 8, leading: 8, bottom: 8, trailing: 8)

    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
                                           heightDimension: .absolute(200))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])

    let section = NSCollectionLayoutSection(group: group)
    return section
}
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)

В SwiftUI: опыт с List, LazyVStack/HStack и ScrollView для построения коллекций.