Dynamic Island es un área interactiva en la parte superior del iPhone 14 Pro y modelos posteriores, que combina el recorte de hardware de la cámara con notificaciones de software en un único elemento de interfaz. Dynamic Island adapta su forma y tamaño al tipo de contenido: llamada, temporizador, música, Live Activity, conexión de AirPods. Los desarrolladores interactúan a través de la API de Dynamic Island basada en ActivityKit y WidgetKit. Más información en Dynamic Island HIG.
Puntos clave
Dynamic Island es un elemento de interfaz del iPhone 14 Pro, 15 Pro y modelos posteriores que utiliza el área alrededor de la cámara frontal y los sensores Face ID para mostrar notificaciones y Live Activity. A diferencia del antiguo notch, que era un elemento negro estático, Dynamic Island cambia dinámicamente de forma y tamaño: se expande para mostrar un temporizador, se contrae para el icono de AirPods conectados, se convierte en un rectángulo para resultados deportivos.
Implementación técnica de Dynamic Island se basa en el recorte de hardware con forma de píldora de la pantalla OLED y el procesamiento de píxeles de software a su alrededor. El sistema aumenta la frecuencia de actualización de píxeles a 120 Hz en el área de Island y utiliza suavizado para una transición fluida entre el contenido y el área negra de la cámara. El desarrollador no programa Island directamente — crea contenido a través de ActivityKit, y el sistema lo coloca alrededor del recorte automáticamente.
Percepción del usuario — Dynamic Island convierte una desventaja de hardware en un elemento funcional. Según investigaciones de Apple, los usuarios perciben Island como una parte natural de la pantalla después de solo unos días de uso. Las animaciones de iluminación y cambio de atención — por ejemplo, una notificación entrante desplaza Island y muestra contenido con un efecto de expansión a 120 fotogramas por segundo.
Dynamic Island admite tres modos de visualización de contenido, que el sistema selecciona automáticamente según el tipo y número de actividades. El desarrollador define la UI para cada modo en WidgetBundle, pero no controla qué modo está activo en ese momento. El sistema también puede mostrar dos actividades simultáneamente: una a la izquierda del recorte, otra a la derecha.
| Modo | Tamaño | Contenido | Ejemplo |
|---|---|---|---|
| Compacto | ~50pt ancho | Icono + texto corto | Temporizador: icono de reloj + "05:00" |
| Mínimo | ~22pt redondo | Solo icono de app | Notificación de captura de pantalla |
| Expandido | ~300pt x 80pt | Vista SwiftUI personalizada | Puntuación deportiva con logotipos |
Transición entre modos se realiza con una animación del sistema que dura 0.4–0.6 segundos con una curva ease-in-out. Cuando aparece una nueva Activity, Island se expande del modo compacto al expandido. Al finalizar, se contrae de nuevo. El usuario puede contraer forzosamente el modo expandido deslizando hacia la izquierda — Island pasa a modo compacto o mínimo. El sistema también contrae el modo expandido después de 5 segundos de inactividad si no se esperan actualizaciones.
Dos actividades — si dos aplicaciones tienen Live Activities activas, Dynamic Island las muestra a ambos lados del recorte. El lado izquierdo es la primera Activity iniciada, el derecho es la segunda. Si solo hay una actividad, ocupa el lado izquierdo, el derecho permanece vacío. Al tocar cualquier lado, Island se expande y muestra el contenido de esa Activity. El sistema mismo decide qué Activity tiene prioridad en caso de conflicto.
El contenido de Dynamic Island se crea exclusivamente a través de Live Activity con el framework ActivityKit. El desarrollador define cuatro áreas en el código: compacto izquierdo (compactLeading), compacto derecho (compactTrailing), mínimo (minimal) y expandido (expanded). Cada área es una SwiftUI View que recibe el estado actual de la Activity a través de context. Si un área no está definida, Island no muestra esa Activity en el modo correspondiente.
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")
}
}
}
Limitaciones de SwiftUI en Dynamic Island — componentes disponibles: Text, Image, HStack, VStack, ZStack, Spacer, ProgressView, Button (solo mediante Link), Gauge. Prohibidos: ScrollView, List, TabView, animaciones, gesture recognizers. Paleta de colores — solo System Colors (label, secondaryLabel, tint). Fuentes — tamaños de sistema de .caption a .title3. Las fuentes personalizadas y SF Symbols funcionan correctamente.
Pruebas de Dynamic Island — Xcode proporciona un simulador con soporte para Dynamic Island. Seleccione iPhone 14 Pro o 15 Pro como dispositivo destino. ActivityKit simula diferentes modos de Island: el botón Dynamic Island Mode en el menú Debug de Xcode cambia entre compacto, mínimo y expandido. Para probar múltiples Activities simultáneamente, use esquemas con diferentes ActivityID o ejecute dos instancias de la aplicación.
Eventos del sistema — llamadas, AirPods, Face ID, carga y otros — tienen prioridad sobre las Live Activities personalizadas. Cuando ocurre un evento del sistema, Island pausa la visualización del contenido personalizado y muestra el del sistema. Después de que el evento del sistema finaliza, Island vuelve al contenido personalizado con una animación. El desarrollador no puede cancelar ni modificar los eventos del sistema — se gestionan a nivel del sistema operativo iOS.
| Evento del sistema | Formato de visualización | Prioridad |
|---|---|---|
| Llamada entrante | Tarjeta mínima con nombre de contacto | Alta |
| AirPods | Animación + carga de batería | Media |
| Face ID | Icono de candado | Media |
| Carga | Icono de rayo + porcentaje | Baja |
| AirDrop | Progreso de transferencia | Media |
| Captura de pantalla | Animación de obturador | Baja |
Llamada entrante — el evento del sistema más importante. Dynamic Island muestra el nombre del llamante a la izquierda del recorte y la duración/estado a la derecha. Durante una llamada activa, Island no muestra ninguna Live Activity personalizada. El usuario puede expandir Island para abrir la pantalla de llamada o contraerla para seguir trabajando en la aplicación con la llamada activa en segundo plano.
Conexión de AirPods — al abrir el estuche cerca del iPhone, Dynamic Island anima la conexión y muestra la carga de cada auricular y del estuche. La animación dura 2–3 segundos, después de lo cual Island vuelve a su estado anterior. Si el usuario no tenía Live Activities activas, Island permanece vacío. Los AirPods Pro 2 también muestran el volumen y el modo de cancelación de ruido al presionar el vástago.
Mejores prácticas de Dynamic Island de Apple se recomienda seguir para garantizar una experiencia de usuario de calidad. El modo compacto debe mostrar solo la información más importante — un icono y un solo número o etiqueta corta. El modo expandido — solo información clave sin elementos redundantes. Evite colocar texto en modo compacto si supera los 20 caracteres — el sistema trunca el texto con puntos suspensivos.
Actualizaciones push para Dynamic Island — use ActivityKit push para actualizaciones poco frecuentes (estado de pedido, resultados deportivos) y actualizaciones locales para temporizadores frecuentes o cronómetros. Las notificaciones push pasan por APNs y tardan 0.5–2 segundos en mostrarse en Island. StaleDate — establezca la fecha de caducidad del contenido: si una actualización no llega a tiempo, el sistema muestra un fondo gris en lugar del contenido, señalando al usuario datos desactualizados.
func updateDelivery(activity: Activity<DeliveryAttributes>) {
Task {
let newContent = ActivityContent(
state: DeliveryAttributes.ContentState(
status: .delivered,
estimatedMinutes: 0
),
staleDate: Date().addingTimeInterval(300)
)
await activity.update(newContent)
// Finalizando Activity en 2 segundos
try? await Task.sleep(nanoseconds: 2_000_000_000)
await activity.end(newContent)
}
}
Consumo de energía — Dynamic Island y Live Activities tienen un impacto mínimo en la batería gracias a la optimización de hardware de la pantalla OLED. Los píxeles negros alrededor del recorte están apagados y el contenido se renderiza en un coprocesador dedicado. El consumo promedio de Live Activity es inferior al 1% de batería por hora de uso con actualización cada 5 minutos. El sistema pausa automáticamente Island cuando la batería está baja (por debajo del 20%) o en modo de ahorro de energía.
Diseño para Dynamic Island no requiere adaptar la UI principal de la aplicación — Island funciona independientemente de la pantalla activa. Los colores de Live Activity deben coincidir con el tema del sistema (claro/oscuro) a través de Color Assets del sistema. SF Symbols son preferibles a los iconos personalizados — se muestran correctamente en cualquier modo de Island y tienen soporte integrado para Dynamic Type.
Preguntas frecuentes
Dynamic Island solo está disponible en iPhone 14 Pro, 14 Pro Max, 15 Pro, 15 Pro Max y posteriores con iOS 16.1+. En iPhones más antiguos con notch, Dynamic Island no se muestra — Live Activity aparece como un banner normal en la pantalla de bloqueo. El desarrollador no necesita escribir código diferente: el sistema mismo adapta la interfaz a las capacidades del dispositivo.
Dynamic Island admite la visualización de dos actividades simultáneamente — se colocan a la izquierda y derecha del recorte de la cámara. Si solo hay una actividad, ocupa el lado izquierdo y el derecho permanece en estado compacto. Al tocar cualquier lado, Island se expande y muestra el contenido de la Activity correspondiente.
Eventos del sistema en Dynamic Island: llamada entrante con tarjeta mínima y nombre de contacto, conexión de AirPods con animación y carga de batería, Face ID con icono de candado, carga del dispositivo con porcentaje, modo módem, cambio de volumen, activación del modo silencio, AirDrop con progreso de transferencia y captura de pantalla con animación de obturador.
Dynamic Island no requiere una API separada — muestra Live Activities creadas a través de ActivityKit junto con WidgetKit. La aplicación registra una Activity con configuración DynamicIsland, define vistas SwiftUI compacta, mínima y expandida. El sistema la muestra automáticamente en Dynamic Island en dispositivos compatibles.
Dynamic Island está limitado a tres estados visuales con diferentes tamaños: compacto hasta 50pt, mínimo hasta 22pt, expandido hasta 300pt. En modo compacto, no se recomienda colocar texto de más de 20 caracteres. Solo están disponibles componentes SwiftUI del sistema — Text, Image, ProgressView, Gauge. Las fuentes y colores personalizados están limitados a la paleta del sistema.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también