Dynamic Island: что это, интерактивные уведомления iPhone

Автор: IT Sectr Опубликовано: 2026-02-16 Время чтения: 9 мин

Dynamic Island — интерактивная область в верхней части iPhone 14 Pro и новее, объединяющая аппаратный вырез камеры с программными уведомлениями в единый элемент интерфейса. Dynamic Island адаптирует форму и размер под тип контента: звонок, таймер, музыка, Live Activity, подключение AirPods. Разработчики взаимодействуют через Dynamic Island API на основе ActivityKit и WidgetKit. Подробнее — на Dynamic Island HIG.

Главное

  • Dynamic Island — программно-аппаратный элемент UI на iPhone 14 Pro и новее
  • Три режима — компактный, минимальный и расширенный с разными размерами контента
  • Live Activities — основной способ кастомного контента в Dynamic Island
  • Анимации — система автоматически управляет переходами между состояниями Island
  • Системные события — звонки, AirPods, Face ID, зарядка встроены в Dynamic Island

Что такое Dynamic Island на iPhone?

Dynamic Island — элемент интерфейса iPhone 14 Pro, 15 Pro и новее, который использует область вокруг фронтальной камеры и Face ID сенсоров для отображения уведомлений и Live Activity. В отличие от старого выреза notch, который был статичным чёрным элементом, Dynamic Island динамически меняет форму и размер: расширяется для отображения таймера, сжимается для иконки подключённых AirPods, превращается в прямоугольник для спортивных результатов.

Техническая реализация Dynamic Island основана на аппаратном вырезе (pill-shaped cutout) OLED-экрана и программной обработке пикселей вокруг него. Система увеличивает частоту обновления пикселей до 120 Гц в области Island и использует сглаживание для плавного перехода между контентом и чёрной областью камеры. Разработчик не программирует Island напрямую — он создаёт контент через ActivityKit, а система размещает его вокруг выреза автоматически.

Восприятие пользователем Dynamic Island превращает аппаратный недостаток в функциональный элемент. Согласно исследованиям Apple, пользователи воспринимают Island как естественную часть экрана уже после нескольких дней использования. Подсветка и анимации переключения внимания — например, приход уведомления сдвигает Island и показывает контент с эффектом расширения на 120 кадрах в секунду.

Режимы отображения Dynamic Island

Dynamic Island поддерживает три режима отображения контента, которые система выбирает автоматически на основе типа и количества активностей. Разработчик задаёт UI для каждого режима в WidgetBundle, но не управляет тем, какой режим активен в данный момент. Система также может отображать две активности одновременно: одна слева от выреза, другая справа.

РежимРазмерКонтентПример
Компактный~50pt ширинаИконка + короткий текстТаймер: иконка часов + «05:00»
Минимальный~22pt круглаяТолько иконка приложенияУведомление о скриншоте
Расширенный~300pt x 80ptКастомная SwiftUI ViewСпортивный счёт с логотипами

Переход между режимами выполняется с системной анимацией длительностью 0.4–0.6 секунды с кривой ease-in-out. При появлении новой Activity Island расширяется из компактного в расширенный режим. При завершении — сжимается обратно. Пользователь может принудительно свернуть расширенный режим свайпом влево — Island переходит в компактный или минимальный. Система также сворачивает расширенный режим после 5 секунд бездействия, если не ожидается обновлений.

Две активности — если два приложения имеют активные Live Activity, Dynamic Island показывает их с двух сторон выреза. Левая сторона — первая запущенная Activity, правая — вторая. Если активность одна, она занимает левую сторону, правая остаётся пустой. При нажатии на любую сторону Island расширяется и показывает контент этой Activity. Система сама решает, какой Activity дать приоритет при конфликте.

Создание контента для Dynamic Island

Dynamic Island контент создаётся исключительно через Live Activity с фреймворком ActivityKit. Разработчик определяет четыре области в коде: компактная левая (compactLeading), компактная правая (compactTrailing), минимальная (minimal) и расширенная (expanded). Каждая область — это SwiftUI View, которая получает текущее состояние Activity через context. Если область не определена, Island не отображает эту Activity в соответствующем режиме.

swift
struct DeliveryIsland: DynamicIsland {
    var body: some DynamicIslandContent {
        DynamicIslandExpandedContent {
            VStack(alignment: .leading) {
                Text(context.state.status)
                    .font(.headline)
                ProgressView(
                    value: context.state.progress
                )
                Text("ETA: \(context.state.minutes) min")
                    .font(.caption)
            }
        } compactLeading: {
            Image(systemName: "box.truck")
        } compactTrailing: {
            Text("\(context.state.minutes) min")
                .monospacedDigit()
        } minimal: {
            Image(systemName: "box.truck")
        }
    }
}

Ограничения SwiftUI в Dynamic Island — доступные компоненты: Text, Image, HStack, VStack, ZStack, Spacer, ProgressView, Button (только через Link), Gauge. Запрещены: ScrollView, List, TabView, анимации, gesture recognizers. Цветовая палитра — только System Colors (label, secondaryLabel, tint). Шрифты — системные размеры от .caption до .title3. Кастомные шрифты и SF Symbols работают корректно.

Тестирование Dynamic Island — Xcode предоставляет симулятор с поддержкой Dynamic Island. Выберите iPhone 14 Pro или 15 Pro в качестве target device. ActivityKit симулирует разные режимы Island: кнопка Dynamic Island Mode в Xcode Debug menu переключает между компактным, минимальным и расширенным. Для тестирования нескольких Activity одновременно используйте схемы с разными ActivityID или запустите два экземпляра приложения.

Системные события в Dynamic Island

Системные события — звонки, AirPods, Face ID, зарядка и другие — имеют приоритет над кастомными Live Activity. Когда происходит системное событие, Island приостанавливает отображение кастомного контента и показывает системный. После завершения системного события Island возвращается к кастомному контенту с анимацией. Разработчик не может отменить или изменить системные события — они управляются на уровне операционной системы iOS.

Системное событиеФормат отображенияПриоритет
Входящий звонокМинимальная карта с именем контактаВысокий
AirPodsАнимация + заряд батареиСредний
Face IDИконка замкаСредний
ЗарядкаИконка молнии + процентыНизкий
AirDropПрогресс передачиСредний
СкриншотАнимация затвораНизкий

Входящий звонок — самое важное системное событие. Dynamic Island показывает имя вызывающего абонента слева от выреза и длительность/статус справа. При активном звонке Island не отображает никакие кастомные Live Activity. Пользователь может расширить Island для открытия экрана звонка или свернуть для продолжения работы в приложении с активным звонком на фоне.

Подключение AirPods — при открытии кейса рядом с iPhone Dynamic Island анимирует подключение и показывает заряд каждого наушника и кейса. Анимация длится 2–3 секунды, после чего Island возвращается к предыдущему состоянию. Если у пользователя не было активных Live Activity, Island остаётся пустым. AirPods Pro 2 также отображают громкость и режим шумоподавления при нажатии на ножку.

Лучшие практики разработки для Dynamic Island

Лучшие практики Dynamic Island от Apple рекомендуется соблюдать для обеспечения качественного пользовательского опыта. Компактный режим должен отображать только самую важную информацию — иконку и одно число или короткую метку. Расширенный режим — только ключевую информацию без избыточных элементов. Избегайте размещения текста в компактном режиме, если он превышает 20 символов — система обрезает текст многоточием.

Push-обновления для Dynamic Island — используйте ActivityKit push для редких обновлений (статус заказа, спортивные результаты) и локальные обновления для частых таймеров или секундомеров. Push-уведомления проходят через APNs и занимают 0.5–2 секунды до отображения в Island. StaleDate — устанавливайте дату устаревания контента: если обновление не пришло вовремя, система показывает серый фон вместо контента, сигнализируя пользователю об устаревших данных.

swift
func updateDelivery(activity: Activity<DeliveryAttributes>) {
    Task {
        let newContent = ActivityContent(
            state: DeliveryAttributes.ContentState(
                status: .delivered,
                estimatedMinutes: 0
            ),
            staleDate: Date().addingTimeInterval(300)
        )
        await activity.update(newContent)
        // Завершаем Activity через 2 секунды
        try? await Task.sleep(nanoseconds: 2_000_000_000)
        await activity.end(newContent)
    }
}

Энергопотребление — Dynamic Island и Live Activities минимально влияют на батарею благодаря аппаратной оптимизации OLED-экрана. Чёрные пиксели вокруг выреза отключены, а контент рендерится на выделенном сопроцессоре. Среднее потребление Live Activity — менее 1% заряда батареи за час использования при обновлении каждые 5 минут. Система автоматически приостанавливает Island при низком заряде батареи (ниже 20%) или в режиме энергосбережения.

Дизайн для Dynamic Island не требует адаптации основного UI приложения — Island работает независимо от активного экрана. Цвета Live Activity должны соответствовать системной теме (светлая/тёмная) через системные Color Assets. SF Symbols предпочтительнее кастомных иконок — они гарантированно корректно отображаются в любом режиме Island и имеют встроенную поддержку Dynamic Type.

Часто задаваемые вопросы

Как Dynamic Island выглядит на старых iPhone?

Dynamic Island доступен только на iPhone 14 Pro, 14 Pro Max, 15 Pro, 15 Pro Max и новее с iOS 16.1+. На старых iPhone с «чёлкаой» Dynamic Island не отображается — Live Activity показывается как обычный баннер на экране блокировки. Разработчику не нужно писать разный код: система сама адаптирует интерфейс под возможности устройства.

Можно ли разместить два Live Activity в Dynamic Island?

Dynamic Island поддерживает отображение двух активностей одновременно — они располагаются слева и справа от выреза камеры. Если активность одна, она занимает левую сторону, а правая остаётся в компактном состоянии. При нажатии на любую сторону Island расширяется и показывает контент соответствующей Activity.

Какие системные события используют Dynamic Island?

Системные события в Dynamic Island: входящий звонок с минимальной картой и именем контакта, подключение AirPods с анимацией и зарядом батареи, Face ID с иконкой замка, зарядка устройства с процентом, режим модема, изменение громкости, включение Silent Mode, AirDrop с прогрессом передачи и скриншот с анимацией затвора.

Как добавить Dynamic Island поддержку в приложение?

Dynamic Island не требует отдельного API — он отображает Live Activity, созданные через ActivityKit совместно с WidgetKit. Приложение регистрирует Activity с конфигурацией DynamicIsland, определяет компактный, минимальный и расширенный SwiftUI View. Система автоматически показывает её в Dynamic Island на поддерживаемых устройствах.

Есть ли ограничения по контенту в Dynamic Island?

Dynamic Island ограничен тремя визуальными состояниями с разными размерами: компактное до 50pt, минимальное до 22pt, расширенное до 300pt. В компактном режиме не рекомендуется размещать текст длиннее 20 символов. Доступны только системные SwiftUI компоненты — Text, Image, ProgressView, Gauge. Кастомные шрифты и цвета ограничены системной палитрой.

Итоги

  • Dynamic Island — интерактивная область вокруг выреза камеры на iPhone 14 Pro и новее
  • Три режима — компактный, минимальный и расширенный с системным управлением переходов
  • Live Activity — единственный способ кастомного контента через ActivityKit и WidgetKit
  • Системные события — звонки, AirPods, Face ID, зарядка имеют приоритет над кастомным контентом
  • SwiftUI ограничения — только Text, Image, ProgressView, HStack, VStack, ZStack, Gauge
  • Энергопотребление — менее 1% батареи за час использования с обновлением раз в 5 минут
  • Две активности — Island отображает до двух активностей одновременно с двух сторон выреза

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также