Visualviewport api por debajo de iOS 13

Hola,

Vi que Discourse de alguna manera logró calcular la parte superior de la teclado virtual en iOS.
Esto es importante si quieres posicionar algo justo encima del teclado virtual, como este campo de entrada en el que estoy escribiendo ahora mismo.

Esto no es un problema en dispositivos con navegador Android, ya que los elementos con posición fija se empujan automáticamente hasta la parte superior del teclado visual cuando se hacen visibles.

La solución alternativa para iOS es utilizar la API visualViewport https://developer.mozilla.org/en-US/docs/Web/API/Visual_Viewport_API.
El único problema es que no hay soporte para dispositivos anteriores a iOS 13…

He probado este mismo campo de entrada en un dispositivo con iOS 12.1 y, al parecer, Discourse logró replicar el comportamiento deseado incluso en versiones de Safari para iOS no compatibles.

¿Podría alguien indicarme el camino correcto para lograr el mismo resultado? Se lo agradecería mucho :smiley:

Saludos cordiales,
Wouter Vermeersch

Recuerdo que @sam lo llamó una ‘montaña de trucos’, no estoy seguro de que realmente quieras ir por ahí..

2 Me gusta

Puedo imaginar que es una montaña de trucos. Llevo días dándole vueltas a esto, así que estoy listo y dispuesto a escalar esa montaña con gusto :grinning: ..

Ya tuve que implementar un truco bastante sucio para evitar que Safari móvil levantara la barra fija superior al hacer clic en un campo de entrada. De hecho, creo que no será mucho peor que lo que tuve que hacer allí para lograrlo :stuck_out_tongue_closed_eyes:

2 Me gusta

El terrible truco consistía en sacar elementos de su posición fija cuando el área de texto ganaba el foco y ocultar todo en la página. Luego, volver a mostrarlo cuando el área de texto perdía el foco.

Era muy peculiar. Qué alegría que @pmusaraj haya presentado una implementación mucho más robusta.

5 Me gusta

El código relevante para ambas soluciones está aquí: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/safari-hacks.js

Sin embargo, como se indica en ese archivo, pronto eliminaremos los parches para iOS 12. iOS 14 salió este año y solo alrededor del 5% de los dispositivos siguen en iOS 12.

4 Me gusta

¡Gracias por compartir! :smiley:

He echado un vistazo rápido a tu solución alternativa; parece que optaste por codificar manualmente los tamaños de todos los posibles tamaños de teclado.

Sin embargo, cuando desactivan la sugerencia automática, el teclado cambia de tamaño. ¿Cómo lo maneja?

No sabía que el público que usa iOS 12 fuera tan bajo. ¿Estás seguro de que solo queda un 5% con iOS 12 o versiones anteriores? En ese caso, podría ser una pérdida de tiempo centrarse en ese problema en particular.

Lo verifiqué en un iPhone 6 con iOS 2.14.

La solución funciona perfectamente cuando la sugerencia automática está activada… cuando se desactiva la sugerencia automática, nos queda un espacio en blanco… pero como ya mencionaste, la cantidad de usuarios que aún están atascados en iOS 12 es muy baja… Incluso mucho menor para los usuarios atascados en iOS 12 con la sugerencia automática desactivada.

Así que tu corrección es lo mejor que puedo imaginar. ¡Gracias por compartir! :wink:

No sé si existen cifras oficiales, pero este gráfico de Mixpanel sitúa a iOS 12 y versiones anteriores en un 7%.

Estoy muy de acuerdo en que no vale la pena tu esfuerzo centrarte en una solución para esto en iOS 12.

3 Me gusta