Ответ
Да, ручная верстка через прямое задание frame используется, хотя и реже, чем Auto Layout. Это актуально в нескольких сценариях:
Когда это уместно:
- Высокопроизводительная отрисовка: В
drawRect:или при работе сCALayer, где нужен абсолютный контроль над координатами. - Кастомные анимации: Прямое управление
frameилиcenterвнутри блокаUIView.animate. - Очень простые или фиксированные layout: Например, размещение разделителя или фонового view с постоянными отступами.
- Наследие и оптимизация: В старых проектах или для микрооптимизации в критичных к производительности местах (например, в ячейках таблицы со сложной иерархией).
Пример и важные замечания:
let badge = UILabel()
badge.text = "NEW"
badge.textColor = .white
badge.backgroundColor = .red
badge.textAlignment = .center
// Ручная установка frame относительно родителя
badge.frame = CGRect(x: parentView.bounds.width - 50,
y: 10,
width: 40,
height: 20)
parentView.addSubview(badge)
Критические нюансы:
- Координаты
frameзадаются в системе координат родительского view. - При изменении размера родителя (
bounds) или повороте устройстваframeне обновится автоматически. Необходимо пересчитывать вручную (например, вlayoutSubviews()илиviewDidLayoutSubviews()). - Для корректной работы с трансформациями (
transform) используйтеcenterиbounds, а неframe.
Вывод: frame — это низкоуровневый инструмент. Auto Layout и SwiftUI предпочтительны для создания адаптивных интерфейсов, но понимание работы с frame необходимо для глубокой настройки и отладки.