Ответ
Свойство frame (CGRect) описывает положение и размер UIView в системе координат её родительской вью (superview).
Что хранится в frame:
origin.xиorigin.y: Координаты левого верхнего угла вью относительно левого верхнего угла еёsuperview.size.widthиsize.height: Ширина и высота вью.
Критически важные нюансы:
- Зависимость от
boundsиcenter: Значениеframeявляется вычисляемым и зависит отbounds.sizeиcenter. Прямое изменениеframeможет неявно изменитьcenter. - Игнорирование трансформаций:
frameстановится неопределённым (CGRect.null), если к вью применён ненулевойtransform(например, поворот). Для позиционирования трансформированной вью используйтеcenter. - Конфликт с Auto Layout: Прямая установка
frameдля вью, управляемой Auto Layout (имеющей constraints), приводит к конфликту. Система может перезаписать вашframeна следующем цикле обновления лэйаута.
Пример:
// Создаём вью, позиционируя её в точке (20, 30) родительской вью
let view = UIView(frame: CGRect(x: 20, y: 30, width: 100, height: 50))
print(view.frame) // (x: 20.0, y: 30.0, width: 100.0, height: 50.0)