Dynamic Island é uma área interativa na parte superior do iPhone 14 Pro e modelos mais recentes, combinando o recorte de hardware da câmera com notificações de software em um único elemento de interface. Dynamic Island adapta sua forma e tamanho ao tipo de conteúdo: chamada, timer, música, Live Activity, conexão AirPods. Os desenvolvedores interagem através da API Dynamic Island baseada em ActivityKit e WidgetKit. Saiba mais em Dynamic Island HIG.
Principais pontos
Dynamic Island é um elemento de interface do iPhone 14 Pro, 15 Pro e modelos mais recentes que usa a área ao redor da câmera frontal e dos sensores Face ID para exibir notificações e Live Activity. Ao contrário do antigo notch, que era um elemento preto estático, a Dynamic Island muda dinamicamente de forma e tamanho: expande para mostrar um timer, encolhe para o ícone de AirPods conectados, transforma-se em um retângulo para resultados esportivos.
Implementação técnica da Dynamic Island é baseada no recorte de hardware em formato de pílula da tela OLED e no processamento de pixels por software ao seu redor. O sistema aumenta a taxa de atualização de pixels para 120 Hz na área da Island e usa anti-aliasing para transições suaves entre o conteúdo e a área preta da câmera. O desenvolvedor não programa a Island diretamente — ele cria conteúdo através do ActivityKit, e o sistema o posiciona ao redor do recorte automaticamente.
Percepção do usuário — a Dynamic Island transforma uma desvantagem de hardware em um elemento funcional. De acordo com pesquisas da Apple, os usuários percebem a Island como uma parte natural da tela após apenas alguns dias de uso. As animações de destaque e mudança de atenção — por exemplo, uma notificação recebida desloca a Island e mostra conteúdo com um efeito de expansão a 120 quadros por segundo.
Dynamic Island suporta três modos de exibição de conteúdo, que o sistema seleciona automaticamente com base no tipo e número de atividades. O desenvolvedor define a UI para cada modo no WidgetBundle, mas não controla qual modo está ativo no momento. O sistema também pode exibir duas atividades simultaneamente: uma à esquerda do recorte, outra à direita.
| Modo | Tamanho | Conteúdo | Exemplo |
|---|---|---|---|
| Compacto | ~50pt largura | Ícone + texto curto | Timer: ícone de relógio + "05:00" |
| Mínimo | ~22pt redondo | Apenas ícone do app | Notificação de captura de tela |
| Expandido | ~300pt x 80pt | SwiftUI View personalizada | Placar esportivo com logotipos |
Transição entre modos é realizada com uma animação do sistema de 0.4–0.6 segundos com curva ease-in-out. Quando uma nova Activity aparece, a Island expande do modo compacto para o expandido. Ao finalizar, ela encolhe de volta. O usuário pode forçar o recolhimento do modo expandido com um deslize para a esquerda — a Island passa para o modo compacto ou mínimo. O sistema também recolhe o modo expandido após 5 segundos de inatividade se nenhuma atualização for esperada.
Duas atividades — se dois aplicativos têm Live Activities ativas, a Dynamic Island as mostra em ambos os lados do recorte. O lado esquerdo é a primeira Activity iniciada, o direito é a segunda. Se houver apenas uma atividade, ela ocupa o lado esquerdo, o direito permanece vazio. Tocar em qualquer lado expande a Island e mostra o conteúdo dessa Activity. O próprio sistema decide qual Activity tem prioridade em caso de conflito.
O conteúdo da Dynamic Island é criado exclusivamente através de Live Activity com o framework ActivityKit. O desenvolvedor define quatro áreas no código: compacto esquerdo (compactLeading), compacto direito (compactTrailing), mínimo (minimal) e expandido (expanded). Cada área é uma SwiftUI View que recebe o estado atual da Activity através do context. Se uma área não estiver definida, a Island não exibe essa Activity no modo correspondente.
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")
}
}
}
Limitações do SwiftUI na Dynamic Island — componentes disponíveis: Text, Image, HStack, VStack, ZStack, Spacer, ProgressView, Button (apenas via Link), Gauge. Proibidos: ScrollView, List, TabView, animações, gesture recognizers. Paleta de cores — apenas System Colors (label, secondaryLabel, tint). Fontes — tamanhos do sistema de .caption a .title3. Fontes personalizadas e SF Symbols funcionam corretamente.
Testando a Dynamic Island — o Xcode fornece um simulador com suporte a Dynamic Island. Selecione iPhone 14 Pro ou 15 Pro como dispositivo de destino. O ActivityKit simula diferentes modos da Island: o botão Dynamic Island Mode no menu Debug do Xcode alterna entre compacto, mínimo e expandido. Para testar várias Activities simultaneamente, use esquemas com diferentes ActivityIDs ou execute duas instâncias do aplicativo.
Eventos do sistema — chamadas, AirPods, Face ID, carregamento e outros — têm prioridade sobre as Live Activities personalizadas. Quando ocorre um evento do sistema, a Island pausa a exibição de conteúdo personalizado e mostra o conteúdo do sistema. Após o término do evento do sistema, a Island retorna ao conteúdo personalizado com uma animação. O desenvolvedor não pode cancelar ou modificar eventos do sistema — eles são gerenciados no nível do sistema operacional iOS.
| Evento do sistema | Formato de exibição | Prioridade |
|---|---|---|
| Chamada recebida | Cartão mínimo com nome do contato | Alta |
| AirPods | Animação + carga da bateria | Média |
| Face ID | Ícone de cadeado | Média |
| Carregamento | Ícone de raio + porcentagem | Baixa |
| AirDrop | Progresso da transferência | Média |
| Captura de tela | Animação do obturador | Baixa |
Chamada recebida — o evento de sistema mais importante. A Dynamic Island mostra o nome do chamador à esquerda do recorte e a duração/status à direita. Durante uma chamada ativa, a Island não exibe nenhuma Live Activity personalizada. O usuário pode expandir a Island para abrir a tela de chamada ou recolhê-la para continuar trabalhando no aplicativo com a chamada ativa em segundo plano.
Conexão AirPods — ao abrir o estojo próximo ao iPhone, a Dynamic Island anima a conexão e mostra a carga de cada fone e do estojo. A animação dura 2–3 segundos, após os quais a Island retorna ao seu estado anterior. Se o usuário não tinha Live Activities ativas, a Island permanece vazia. Os AirPods Pro 2 também exibem volume e modo de cancelamento de ruído ao pressionar a haste.
Melhores práticas da Dynamic Island da Apple são recomendadas para garantir uma experiência do usuário de qualidade. O modo compacto deve exibir apenas as informações mais importantes — um ícone e um único número ou rótulo curto. O modo expandido — apenas informações-chave sem elementos redundantes. Evite colocar texto no modo compacto se exceder 20 caracteres — o sistema trunca o texto com reticências.
Atualizações push para Dynamic Island — use ActivityKit push para atualizações raras (status do pedido, resultados esportivos) e atualizações locais para temporizadores frequentes ou cronômetros. As notificações push passam pela APNs e levam 0.5–2 segundos para aparecer na Island. StaleDate — defina a data de expiração do conteúdo: se uma atualização não chegar a tempo, o sistema mostra um fundo cinza em vez do conteúdo, sinalizando dados desatualizados ao usuário.
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 em 2 segundos
try? await Task.sleep(nanoseconds: 2_000_000_000)
await activity.end(newContent)
}
}
Consumo de energia — Dynamic Island e Live Activities têm impacto mínimo na bateria graças à otimização de hardware da tela OLED. Os pixels pretos ao redor do recorte estão desligados e o conteúdo é renderizado em um coprocessador dedicado. O consumo médio de Live Activity é inferior a 1% de bateria por hora de uso com atualização a cada 5 minutos. O sistema pausa automaticamente a Island quando a bateria está baixa (abaixo de 20%) ou no modo de economia de energia.
Design para Dynamic Island não requer adaptação da UI principal do aplicativo — a Island funciona independentemente da tela ativa. As cores da Live Activity devem corresponder ao tema do sistema (claro/escuro) através dos Color Assets do sistema. SF Symbols são preferíveis a ícones personalizados — eles são garantidos de exibir corretamente em qualquer modo da Island e têm suporte integrado ao Dynamic Type.
Perguntas frequentes
Dynamic Island está disponível apenas no iPhone 14 Pro, 14 Pro Max, 15 Pro, 15 Pro Max e posteriores com iOS 16.1+. Em iPhones mais antigos com notch, a Dynamic Island não é exibida — a Live Activity aparece como um banner normal na tela de bloqueio. O desenvolvedor não precisa escrever código diferente: o próprio sistema adapta a interface às capacidades do dispositivo.
A Dynamic Island suporta a exibição de duas atividades simultaneamente — elas são posicionadas à esquerda e à direita do recorte da câmera. Se houver apenas uma atividade, ela ocupa o lado esquerdo e o direito permanece no estado compacto. Tocar em qualquer lado expande a Island e mostra o conteúdo da Activity correspondente.
Eventos do sistema na Dynamic Island: chamada recebida com cartão mínimo e nome do contato, conexão AirPods com animação e carga da bateria, Face ID com ícone de cadeado, carregamento do dispositivo com porcentagem, modo modem, alteração de volume, ativação do Modo Silencioso, AirDrop com progresso da transferência e captura de tela com animação do obturador.
Dynamic Island não requer uma API separada — ela exibe Live Activities criadas através do ActivityKit em conjunto com o WidgetKit. O aplicativo registra uma Activity com configuração DynamicIsland, define SwiftUI Views compacta, mínima e expandida. O sistema a exibe automaticamente na Dynamic Island em dispositivos compatíveis.
A Dynamic Island é limitada a três estados visuais com tamanhos diferentes: compacto até 50pt, mínimo até 22pt, expandido até 300pt. No modo compacto, não é recomendado colocar texto com mais de 20 caracteres. Apenas componentes SwiftUI do sistema estão disponíveis — Text, Image, ProgressView, Gauge. Fontes e cores personalizadas são limitadas à paleta do sistema.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também