В чем отличие между UITableView и UIStackView и можно ли сделать таблицу из UIStackView
Что проверяют
Понимаете ли вы, зачем нужно переиспользование ячеек. Вопрос практический: неверный выбор даёт зависший интерфейс на длинном списке.
Как отвечать
Это компоненты разного назначения. UITableView это прокручиваемый список с источником данных и переиспользованием ячеек: на экране живёт столько ячеек, сколько помещается, остальные создаются и отдаются по мере прокрутки. UIStackView это контейнер разметки: он расставляет переданные ему подвиды в ряд или в столбец и не имеет ни прокрутки, ни источника данных, ни переиспользования.
Отсюда практические отличия:
- память и скорость: таблица держит десяток ячеек независимо от того, тысяча в ней строк или миллион, а стек создаёт и хранит все подвиды сразу;
- возможности из коробки: у таблицы разделители, заголовки секций, свайпы, выделение, редактирование, вставка и удаление с анимацией, у стека ничего этого нет;
- гибкость разметки: стек проще для статичной формы, где элементы разной высоты идут подряд.
Сделать «таблицу» из UIStackView можно: положить стек в UIScrollView и добавить строки как подвиды. Это уместно, когда строк немного и они фиксированные, например экран настроек или карточка товара с блоками. На динамических или длинных списках такой подход даёт долгую первую отрисовку и рост памяти, потому что все строки существуют одновременно.
Ориентир простой: количество строк известно и невелико, содержимое разнородное, берём стек; строк много или число заранее неизвестно, берём UITableView или UICollectionView.
Где спотыкаются
Строят ленту на стеке и удивляются задержке при открытии экрана.
Забывают, что вложенные стеки с большим числом уровней тоже дороги: автолейаут пересчитывает всю иерархию.
Не знают, что современная альтернатива для сложных списков это UICollectionView с составной разметкой, а таблица постепенно уходит в частный случай.