Вопрос проверяет понимание подходов к программному созданию пользовательского интерфейса и их сравнение с визуальными инструментами.
UI кодом создается путем инстанцирования UIView-подклассов (например, UILabel()) и настройки их свойств и ограничений (constraints) программно. Для верстки используют NSLayoutConstraint или более удобный API anchors (view.topAnchor.constraint(...)). Преимущества: лучший контроль версий (конфликты merge разрешаются легче), большая гибкость и динамичность. Недостатки: визуальный результат не виден сразу, требуется больше времени на написание кода, сложнее представить итоговый layout.
Программное создание UI — это подход, при котором весь интерфейс описывается на Swift/Objective-C, без использования Interface Builder (Storyboard/XIB).
Основные методы верстки:
Frames (Рамки): Прямое задание frame (origin, size) для view. Требует ручных расчетов позиции и размеров, особенно при повороте устройства или изменении размера экрана.
Auto Layout Constraints (Ограничения): Система правил, которые определяют размер и позицию view относительно друг друга.
Через NSLayoutConstraint:
let constraint = NSLayoutConstraint(item: button, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0)
constraint.isActive = trueЧерез Anchors (более современный способ):
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
button.widthAnchor.constraint(equalToConstant: 100)
])Преимущества программного подхода:
Контроль версий: Код легко сравнивать и мержить, в отличие от сложных XML-файлов Storyboard.
Динамичность: Легко создавать интерфейсы, которые сильно меняются в зависимости от данных или условий.
Переиспользование: Код UI-компонентов легче выносить в отдельные классы и модули.
Недостатки:
Скорость разработки: Нет визуального предпросмотра, приходится часто запускать приложение.
Объем кода: Требуется писать больше кода для описания того, что в Storyboard делается перетаскиванием.
Поддержка: Может быть сложнее быстро понять layout, глядя только на код.