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 як цільовий пристрій. ActivityKit симулює різні режими Island: кнопка Dynamic Island Mode в меню Debug Xcode перемикає між компактним, мінімальним та розширеним. Для тестування кількох Activity одночасно використовуйте схеми з різними ActivityID або запустіть два екземпляри додатку.

Системні події в Dynamic Island

Системні події — дзвінки, AirPods, Face ID, заряджання та інші — мають пріоритет над кастомними Live Activities. Коли відбувається системна подія, 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 з іконкою замка, заряджання пристрою з відсотком, режим модема, зміна гучності, увімкнення беззвучного режиму, 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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