Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: frame, bounds

В каком методе гарантированно известны финальные размеры frame и bounds?

Вопрос проверяет, понимает ли разработчик, когда можно безопасно использовать размеры view и не ловить баги из-за незавершённого layout.

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

Финальные размеры frame и bounds гарантированно известны в viewDidLayoutSubviews. К этому моменту Auto Layout уже отработал и система применила все изменения геометрии. В более ранних методах размеры могут быть временными или нулевыми. Поэтому вся логика, зависящая от точных размеров, должна выполняться после layout.

Длинный ответ

Размеры view в UIKit становятся корректными не сразу, а только после прохождения layout-процесса. Это критично понимать при работе с Auto Layout.

Почему нельзя доверять ранним методам

На разных этапах жизненного цикла размеры могут быть:

  • CGRect.zero

  • значениями “по умолчанию”

  • устаревшими (до перерасчёта констрейнтов)

Например:

  • в viewDidLoad layout ещё не выполнялся

  • в viewWillAppear layout может быть не завершён

Гарантированная точка

Единственный метод контроллера, где:

  • layout уже завершён

  • frame и bounds актуальны

это viewDidLayoutSubviews.

Что именно гарантируется

В viewDidLayoutSubviews:

  • Auto Layout применил все констрейнты

  • учтены safe area и inset’ы

  • размеры соответствуют реальному положению на экране

Это делает метод идеальным для:

  • вычисления размеров ячеек

  • настройки кастомных слоёв

  • позиционирования элементов относительно друг друга

Альтернативы в отдельных случаях

Иногда размеры также корректны:

  • после layoutIfNeeded()

  • внутри UIView.layoutSubviews()

но для UIViewController именно viewDidLayoutSubviews считается безопасной точкой.

Краткий вывод

Если логика зависит от реальных размеров view — выполняй её в viewDidLayoutSubviews. Любое более раннее место — потенциальный источник нестабильных багов.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • IOS

    IOS

Ключевые слова

#frame

#bounds

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.