Dynamic Island — een interactief gebied boven aan de iPhone 14 Pro en alle iPhones 15/16, dat meldingen, achtergrondactiviteiten en systeemindicatoren verenigt in één dynamische zone. In tegenstelling tot de traditionele uitsparing (notch), verandert Dynamic Island van vorm en grootte afhankelijk van de huidige context. Volgens Apple (WWDC 2024) interageren gebruikers gemiddeld 12 keer per dag met Dynamic Island — via tikken, lang indrukken en Live Activities met ActivityKit. Lees meer over animaties in iOS in het artikel over Corner Radius.
Belangrijkste punten
Dynamic Island — is een interactief gebied op basis van Apple's software-hardware oplossing, geïntroduceerd in september 2022 samen met de iPhone 14 Pro. Fysiek is het een uitsparing in de vorm van een pil, omringd door OLED-pixels die dynamisch van kleur en vorm veranderen. Apple gebruikt een combinatie van een hardware compartiment voor de camera en Face ID met software-rendering van zwarte gebieden eromheen, waardoor de illusie van een «levend» eilandje ontstaat.
Het hoofddoel van Dynamic Island is het overbruggen van de kloof tussen systeemmeldingen en actieve inhoud. In plaats van meldingen in het midden van het scherm (zoals op Android) of als banners bovenin (zoals op oudere iOS-versies), integreert Dynamic Island ze direct in het hardware-gebied. Dit vermindert afleiding en creëert een gevoel van eenheid.
Volgens Apple (iOS 17 Adoption Statistics, 2024) is Dynamic Island beschikbaar op 38% van de actieve iPhones. Vanaf de iPhone 15 (2023) hebben alle modellen in de serie Dynamic Island gekregen, inclusief de basismodellen. In iOS 18 breidde Apple de Live Activities API uit met ondersteuning voor aftellende timers en sportresultaten direct op Dynamic Island.
Dynamic Island is beschikbaar op iPhone 14 Pro, iPhone 14 Pro Max, iPhone 15, iPhone 15 Plus, iPhone 15 Pro, iPhone 15 Pro Max, iPhone 16, iPhone 16 Plus, iPhone 16 Pro, iPhone 16 Pro Max. Op iPad ontbreekt Dynamic Island. Voor ontwikkeling met Dynamic Island is Xcode 14.1+ en iOS 16.1+ vereist.
Dynamic Island ondersteunt drie weergavetoestanden: compact (compact), minimaal (minimal) en uitgebreid (expanded). De overgang tussen toestanden wordt geanimeerd met UIKit-animaties en Core Animation. Het systeem beheert zelf de prioriteit van activiteiten: als meerdere apps tegelijkertijd inhoud proberen weer te geven, gebruikt iOS een wachtrij op basis van de starttijd van de laatste activiteit.
| Toestand | Grootte | Inhoud | Voorbeeld |
|---|---|---|---|
| Compact | 49×18 pt | App-pictogram + systeempictogram | Timer, muziek, oproep |
| Minimal | Tot 66×18 pt | Pictogram + korte tekst | Navigatie-instructies, stappen |
| Expanded | Tot 364×160 pt | Volledige widget met inhoud | Sportscore, taxistatus |
Compacte toestand — de standaardweergave van Dynamic Island wanneer één achtergrondtaak actief is. Wordt weergegeven als een afgeronde pil met het app-pictogram links en het systeempictogram rechts. Standaard starten alle Live Activities in de compacte toestand.
Minimale toestand treedt op wanneer twee of meer taken tegelijkertijd actief zijn. Dynamic Island «splitst» zich in twee afzonderlijke elementen links en rechts van de camera. Minimale toestand maakt het mogelijk om twee onafhankelijke informatiebronnen weer te geven, zoals de aankomsttijd van een taxi en het huidige nummer.
Uitgebreide toestand wordt geactiveerd door lang op Dynamic Island te drukken. In deze modus wordt een volledige widget met aanpasbare inhoud weergegeven: titels, beschrijvingen, voortgangsbalken, knoppen. De uitgebreide toestand ondersteunt scrollen en interactieve elementen.
ActivityKit — een Swift-framework, geïntroduceerd in iOS 16.1, waarmee apps Live Activities kunnen publiceren op Dynamic Island en Lock Screen. ActivityKit gebruikt een architectuur gebaseerd op ActivityView en ActivityAttributes: de eerste bepaalt het type inhoud, de tweede — de variabele gegevens. Het framework werkt samen met WidgetKit, maar in tegenstelling tot widgets kunnen Live Activities in realtime worden bijgewerkt zonder de app te openen.
import ActivityKit
import SwiftUI
// Activiteitsattributen definiëren
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable, Hashable {
var driverName: String
var distanceToArrival: Double
var estimatedMinutes: Int
}
var orderNumber: String
}
// Live Activity starten
func startDeliveryActivity() {
let initialState = DeliveryAttributes.ContentState(
driverName: "Alexey",
distanceToArrival: 3.5,
estimatedMinutes: 12
)
let attributes = DeliveryAttributes(orderNumber: "ORD-2024-8912")
let activity = try? Activity.request(
attributes: attributes,
contentState: initialState,
pushType: .token
)
}
Live Activities worden bijgewerkt via ActivityView, dat SwiftUI-inhoud voor Dynamic Island rendert. Het systeem bepaalt zelf welke sjabloon te gebruiken (compact, minimaal of uitgebreid), afhankelijk van de grootte van Dynamic Island en het aantal activiteiten. Roep activity.update(using: contentState) aan om de inhoud bij te werken. Om te beëindigen — activity.end(dismissalPolicy: .immediate).
ActivityKit ondersteunt push-updates via APNs (Apple Push Notification Service). Bij het starten van een Live Activity kunt u een pushToken aanvragen en vanaf de server updates sturen zonder de app op het apparaat te starten. Push-updates werken via activity.pushToken en Activity.pushToStartToken voor het op afstand starten van Live Activities.
// Live Activity bijwerken via Push
func updateActivity(activity: Activity<DeliveryAttributes>) {
let updatedState = DeliveryAttributes.ContentState(
driverName: "Alexey",
distanceToArrival: 1.2,
estimatedMinutes: 4
)
let alertConfiguration = AlertConfiguration(
title: "Koerier is dichtbij",
body: "Alexey arriveert over 4 minuten",
sound: .default
)
await activity.update(
using: updatedState,
alertConfiguration: alertConfiguration
)
}
AlertConfiguration — een extra parameter die een melding boven Dynamic Island toont bij belangrijke updates (bijvoorbeeld «Koerier aangekomen»). Zonder AlertConfiguration wordt de inhoud stil bijgewerkt, wat geschikt is voor voortgangsbalken en timers.
Notch (uitsparing) — het hardware-gebied van de iPhone X–13, met de camera aan de voorkant, Face ID-sensor en luidspreker. De notch is statisch: de grootte en vorm veranderen niet en meldingen worden eronder weergegeven als standaard banners. Dynamic Island daarentegen gebruikt pixels rond de uitsparing om inhoud weer te geven, waardoor het hardware-element onderdeel van de interface wordt.
| Criterium | Dynamic Island | Notch |
|---|---|---|
| Interactiviteit | Ondersteunt tikken, lang indrukken, vegen | Niet interactief |
| Inhoudsaanpassing | Past vorm aan context aan | Statisch, inhoud onder uitsparing |
| Live Activities | Ingebouwde ondersteuning via ActivityKit | Nee — alleen gewone meldingen |
| Multitasking | Twee gelijktijdige activiteiten (links en rechts) | Slechts één activiteit |
| Beschikbaarheid | iOS 16.1+, iPhone 14 Pro en nieuwer | iOS 11+, iPhone X–13 |
Volgens de Apple Human Interface Guidelines (2025) mag Dynamic Island niet worden gebruikt voor advertenties of het constant weergeven van statische inhoud. Live Activities zijn alleen bedoeld voor achtergrondtaken met een duidelijke levenscyclus: timers, bezorging, sport, muziek, navigatie. Overtreding van deze regels leidt tot afwijzing van de app in de App Store Review.
Dynamic Island heeft een strikte levenscyclus: een activiteit begint met een verzoek via Activity.request(), doorloopt de toestanden actief/onderbroken/bijgewerkt en eindigt met een aanroep van activity.end(). Het systeem kan een activiteit geforceerd beëindigen bij geheugengebrek (bijvoorbeeld bij het starten van de camera). In dat geval ontvangt de app een melding via ActivityActivityState.finished.
Gebaren Dynamic Island worden verwerkt door SwiftUI-inhoud in ActivityView. Standaard gebaren: tikken op de compacte toestand opent de app, lang indrukken opent de uitgebreide toestand, naar beneden vegen sluit de uitgebreide toestand. Aangepaste gebaren worden toegevoegd via SwiftUI-modifiers (onTapGesture, onLongPressGesture) binnen de activiteitsweergave.
Wanneer het systeem een Live Activity beëindigt (of de gebruiker deze wegveegt), moet de app de finished-toestand afhandelen om bronnen vrij te geven. Het wordt aanbevolen om te abonneren op Activity.activityStateUpdates en lokale verwijzingen naar de activiteit te verwijderen na voltooiing.
import ActivityKit
func observeActivityState(activity: Activity<DeliveryAttributes>) {
Task {
for await state in activity.activityStateUpdates {
switch state {
case .active:
print("Activity actief op Dynamic Island")
case .dismissed:
print("Activity verborgen door gebruiker")
await activity.end(dismissalPolicy: .immediate)
case .finished:
print("Activity beëindigd door systeem")
cleanupResources()
@unknown default:
break
}
}
}
}
Aanbeveling van Apple (WWDC 2024, Session 10146): gebruik Dynamic Island niet voor het weergeven van statussen die geen aandacht van de gebruiker vereisen. Elke Live Activity moet een duidelijke start- en eindtrigger hebben. Gebruik voor achtergrondupdates zonder UI Background Tasks, niet Live Activities.
Veelgestelde vragen
Dynamic Island is beschikbaar op iPhone 14 Pro, 14 Pro Max en alle modellen iPhone 15 en iPhone 16 (inclusief de basisversies). Voor ontwikkeling is iOS 16.1+ en Xcode 14.1 vereist. Op oudere modellen (iPhone X–13) wordt de statische notch-uitsparing gebruikt, die geen Live Activities ondersteunt.
Dynamic Island integreert de melding in het hardware-gebied van het scherm zonder inhoud te blokkeren. Een gewone melding verschijnt als een banner bovenin en verdwijnt na enkele seconden. Live Activities op Dynamic Island kunnen uren actief blijven en in realtime worden bijgewerkt (leveringsstatus, timer, muziek).
Gebruik push-updates via APNs. Roep bij het starten van een Live Activity activity.pushToken aan en stuur de token naar uw server. De server stuurt een update-verzoek via APNs met een nieuwe ContentState. Alternatief — lokale update via activity.update(using:) vanuit de app zelf.
iOS splitst Dynamic Island automatisch in twee segmenten bij twee actieve Live Activities. Elke activiteit wordt weergegeven in minimale toestand links en rechts van de camera. Bij lang indrukken van een van de segmenten wordt de uitgebreide toestand van alleen die app geopend.
Controleer: (1) de app heeft NSSupportsLiveActivities = YES in Info.plist, (2) ActivityAttributes en ContentState implementeren Codable en Hashable, (3) iOS-versie 16.1+, (4) het apparaat ondersteunt Dynamic Island. Gebruik voor de simulator iPhone 14 Pro of nieuwer in Xcode.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook