Какие преимущества и недостатки у ручной верстки через frame в iOS?

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

Ответ

Преимущества:

  • Производительность и простота: Прямое присвоение CGRect не требует вычислительно дорогого процесса разрешения констрейнтов (layout pass).
  • Полный контроль: Точное управление позицией и размером, что идеально для кастомных, нестандартных анимаций.
  • Прозрачность: Значения origin и size заданы явно, что упрощает понимание и отладку.
  • Минимальный оверхед: Отсутствие дополнительных объектов (NSLayoutConstraint) и связанных с ними вычислений.

Недостатки:

  • Отсутствие адаптивности: Необходимо вручную пересчитывать фреймы для разных размеров экранов, ориентаций и контента.
  • Трудоемкость поддержки: Любое изменение в дизайне или добавление нового размера экрана требует ручных правок во многих местах кода.
  • Абсолютные координаты: Нет встроенной поддержки относительного позиционирования (например, "растянуть по ширине родителя").
  • Поворот устройства: Требуется ручная обработка изменений bounds в методах вроде viewWillLayoutSubviews().

Пример:

// Просто, быстро, но абсолютно не адаптивно
view.frame = CGRect(x: 20, y: 100, width: 200, height: 50)