В чём отличие frame от bounds в UIView?

Чем отличаются frame и bounds Оба свойства относятся к UIView в iOS (UIKit) frame определяет положение и размер представления в системе координат его супер-вью bounds задаёт размер и положение внутренней области…

Короткий ответ

Что ответить на собеседовании

Чем отличаются frame и bounds Оба свойства относятся к UIView в iOS (UIKit) frame определяет положение и размер представления в системе координат его супер-вью bounds задаёт размер и положение внутренней области представления в его собственной локальной системе координат frame.origin содержит координаты представления относительно супер-вью bounds.origin обычно равен (0,0) и определяет смещение внутреннего содержимого Изменение bounds меняет отображение контента, тогда как frame влияет на положение view На практике frame используют для позиционирования, а bounds — для управления внутренней геометрией и масштабированием

Подробный разбор

Ответ с пояснениями

Чем отличаются frame и bounds

  • Оба свойства относятся к UIView в iOS (UIKit)
  • frame определяет положение и размер представления в системе координат его супер-вью
  • bounds задаёт размер и положение внутренней области представления в его собственной локальной системе координат
  • frame.origin содержит координаты представления относительно супер-вью
  • bounds.origin обычно равен (0,0) и определяет смещение внутреннего содержимого
  • Изменение bounds меняет отображение контента, тогда как frame влияет на положение view
  • На практике frame используют для позиционирования, а bounds — для управления внутренней геометрией и масштабированием

Развёрнутый ответ

Краткий ответ

Frame и bounds — два свойства UIView в iOS, которые нередко путают, хотя назначение у них разное. Frame задаёт положение и размеры UIView относительно супер-вью, то есть во внешней системе координат. Bounds описывает прямоугольную внутреннюю область UIView в её собственной локальной системе координат. Иными словами, frame определяет, где view находится и какого она размера относительно родителя, а bounds — размеры и начало координат внутри самой view.

Главные особенности

  • Frame — это CGRect с координатами x и y, шириной и высотой, заданными в системе координат супер-вью. Если изменить frame, view переместится или изменит размер в пределах окна своего родителя.
  • Bounds — CGRect, задающий внутренний размер view и её локальный origin, который обычно равен (0,0). Изменение bounds перестраивает внутреннюю область view, но не сдвигает её относительно супер-вью.
  • Во время трансформаций, например при вращении с помощью CGAffineTransform, frame может изменяться, тогда как bounds с позиции локальной системы координат остаётся постоянным. Это влияет на отрисовку view и её взаимодействие с пользователем.
  • Практическое отличие: в UIScrollView при прокрутке изменяется origin в bounds, благодаря чему перемещается содержимое, а frame при этом остаётся прежним.

Пример из практики

В iOS-приложениях frame часто изменяют при анимации позиционирования и масштабирования. Для внутренних смещений, например при создании отступов в UILabel или размещении аватарки с маской, используют bounds. Понимание различий между этими свойствами помогает предотвращать ошибки и создавать сложные интерфейсы с трансформациями и вложенными view.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку