Что представляет собой класс UIScreen в iOS?

«Что представляет собой класс UIScreen в iOS?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

UIScreen — это класс в UIKit, который представляет физический или виртуальный дисплей, подключенный к устройству. Он предоставляет доступ к основным метрикам экрана, необходимым для корректного размещения и масштабирования интерфейса.

Ключевые свойства и методы:

  • UIScreen.main — Синглтон, представляющий основной экран устройства.
  • bounds (CGRect) — Границы экрана в точках (points). Это основная система координат для UIKit.
  • scale (CGFloat) — Коэффициент масштабирования между точками и физическими пикселями. Например, 2.0 для Retina, 3.0 для Super Retina.
  • nativeBounds (CGRect) — Физические размеры экрана в пикселях.
  • traitCollection — Коллекция характеристик экрана (размерный класс, контрастность).

Пример использования для адаптивного layout:

let screen = UIScreen.main
let screenWidthInPoints = screen.bounds.width
let screenHeightInPoints = screen.bounds.height
let pixelDensity = screen.scale // Например, 2.0
let physicalWidthInPixels = screen.nativeBounds.width // screenWidthInPoints * pixelDensity

print("Экран: (screenWidthInPoints)x(screenHeightInPoints) pts, масштаб: (pixelDensity)x")

Важные нюансы:

  1. Safe Area: bounds не учитывает безопасные области (вырез, индикатор дома). Для этого используется UIView.safeAreaLayoutGuide.
  2. Несколько экранов: На iPadOS и при использовании внешних дисплеев можно получить массив UIScreen.screens.
  3. Яркость: Через UIScreen.main.brightness можно получить или установить яркость основного экрана (требует разрешения пользователя).