Vi que o Discourse de alguma forma conseguiu calcular a posição superior do teclado virtual no iOS.
Isso é importante se você quiser posicionar algo logo acima do teclado virtual, como este campo de entrada onde estou digitando agora.
Isso não é um problema em dispositivos Android com navegador, pois elementos com position: fixed são automaticamente empurrados para o topo do teclado visual quando ele se torna visível.
Testei este mesmo campo de entrada em um dispositivo com iOS 12.1 e, aparentemente, o Discourse conseguiu replicar o comportamento desejado mesmo em versões do Safari para iOS não suportadas.
Alguém poderia me indicar o caminho certo para alcançar o mesmo resultado? Agradeceria muito
Posso imaginar que é uma montanha de hacks. Estou me quebrando a cabeça com isso há dias, então estou pronto e disposto a escalar essa montanha com prazer ..
Já tive que implementar um hack bem sujo para evitar que o Safari móvel levantasse a barra fixa superior ao focar em um campo de entrada. Na verdade, acho que não será muito pior do que o que tive que fazer para conseguir isso
O hack terrível era arrancar coisas da posição fixa quando a textarea ganhava foco e ocultar tudo na página. Depois, trazê-lo de volta quando a textarea perdia o foco.
Era muito peculiar. Muito feliz que @pmusaraj apresentou uma implementação muito mais robusta.
Como observado nesse arquivo, porém, em breve removeremos as correções para o iOS 12. O iOS 14 foi lançado este ano, e apenas cerca de 5% dos dispositivos ainda estão no iOS 12.
Dei uma olhada rápida na sua solução alternativa e, aparentemente, você optou por codificar manualmente os tamanhos de todos os possíveis tamanhos de teclado?
No entanto, quando eles desativam a sugestão automática, o teclado muda de tamanho. Como isso lida com isso?
Não sabia que o público usando iOS 12 era tão baixo. Tem certeza de que apenas 5% ainda estão com iOS 12 ou inferior? Nesse caso, pode ser perda de tempo focar nesse problema específico.
A solução alternativa funciona perfeitamente quando o preenchimento automático está ativado… quando o preenchimento automático é desativado, permanecemos com um espaço em branco… mas, como você já mencionou, a quantidade de usuários ainda presos no iOS 12 é muito baixa… Ainda menor para usuários presos no iOS 12 com o preenchimento automático desativado.
Portanto, sua correção é a melhor que consigo imaginar. Obrigado por compartilhar!