Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando trabalhamos com interfaces que usam modais no iOS, um problema comum e bastante irritante é o scroll automático ao focar em um campo de input.
Esse comportamento, que faz a página descer aproximadamente 50% da altura total ao ativar o teclado virtual, parece ser uma “feature” nativa do sistema, mas na prática, atrapalha bastante a experiência do usuário.
---
Por mais que pareça uma questão de estética, essa ação de scroll impede o fluxo natural de navegação e pode causar confusão, especialmente em aplicações com layouts sensíveis ao posicionamento. O comportamento é consistente tanto no Safari quanto no Chrome em iOS, o que reforça que a origem é do sistema operacional.
No meu time, essa situação costuma gerar reclamações de usuários e dúvidas sobre como controlar essa movimentação automática. Antes, tentávamos soluções pontuais usando scrollTop, mas elas eram inconsistentes ou geravam efeitos colaterais, como o usuário ser jogado para o topo da página. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
---
O foco em inputs dentro de modais dispara uma série de ações internas do sistema, incluindo a ativação do teclado virtual. Para acomodar o teclado, o iOS ajusta automaticamente o scroll da página, buscando manter o input visível. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
O problema é que essa ação não é facilmente controlável pelo desenvolvedor, pois é uma funcionalidade embutida no sistema de gerenciamento de foco e viewport do iOS. Assim, soluções tradicionais de CSS ou JavaScript muitas vezes não funcionam de forma definitiva. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
---
Uma estratégia eficiente é manipular o posicionamento do corpo da página de forma controlada ao abrir e fechar o modal. A ideia é capturar o scroll atual, aplicar uma fixação na posição, e restaurar após o fechamento. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Exemplo técnico:
// Ao abrir o modal
var scrollOffset = window.pageYOffset. document.body.style.top = `-${scrollOffset}px`. document.body.classList.add('modal--opened'). // Ao fechar o modal
var offset = parseInt(document.body.style.top, 10). document.body.classList.remove('modal--opened'). window.scrollTo(0, -offset).
E o CSS para suportar:
.modal--opened {
position: fixed. left: 0. right: 0. width: 100%. } O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Dessa forma, ao abrir o modal, o corpo fica fixo na posição atual, impedindo o scroll automático. Quando fechamos, restauramos o scroll para o ponto original. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
---
Esse método funciona bem na maioria dos casos, mas tem suas limitações:
Outro ponto importante é fazer a detecção de plataforma para aplicar essa técnica somente no iOS, evitando efeitos indesejados em outros sistemas. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Controlar esse scroll indesejado exige uma combinação de manipulação de CSS e JavaScript, além de uma atenção especial à experiência do usuário. Mesmo sendo uma “feature” do sistema, com as estratégias corretas, dá para minimizar o impacto. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
A implementação que compartilhei aqui é uma das soluções mais eficientes que já testei, ajudando a manter a navegação fluida e previsível. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Por fim, sempre que possível, é bom explorar alternativas de design, como inputs que não acionem o teclado automaticamente ou layouts que se adaptam melhor ao comportamento nativo do sistema. Assim, evitamos essas trapalhadas no código. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Carregando comentários...