Visualviewport api sotto iOS 13

Ciao,

Ho notato che Discourse è riuscito in qualche modo a calcolare la posizione superiore della tastiera virtuale su iOS.
Questo è importante se si desidera posizionare qualcosa esattamente sopra la tastiera virtuale, come questo campo di input in cui sto scrivendo in questo momento.

Su Android questo non è un problema nei browser per dispositivi mobili, perché gli elementi con position: fixed vengono automaticamente spinti fino in alto, appena sopra la tastiera visiva, quando questa diventa visibile.

La soluzione alternativa per iOS consiste nell’utilizzare l’API visualViewport https://developer.mozilla.org/en-US/docs/Web/API/Visual_Viewport_API.
L’unico problema è che non esiste supporto per dispositivi precedenti a iOS 13…

Ho provato lo stesso campo di input su un dispositivo con iOS 12.1 e apparentemente Discourse è riuscito a replicare il comportamento desiderato anche su versioni di Safari per iOS non supportate.

Qualcuno potrebbe indicarmi la strada giusta per ottenere lo stesso risultato? Lo apprezzerei moltissimo :smiley:

Cordiali saluti,
Wouter Vermeersch

Ricordo che @sam lo ha definito una ‘montagna di hack’, non sono sicuro che tu voglia davvero avventurarti lì..

2 Mi Piace

Posso immaginare che sia una montagna di workaround. Mi sto strappando i capelli su questa da giorni, quindi sono pronto e disposto a scalarla con piacere :grinning: ..

Ho già dovuto inserire un workaround davvero sporco per impedire a Safari mobile di alzare la barra fissa in alto quando si mette a fuoco un campo di input. In realtà, penso che non sarà molto peggio di quello che ho dovuto fare lì per far funzionare quella cosa :stuck_out_tongue_closed_eyes:

2 Mi Piace

Il terribile hack consisteva nel rimuovere gli elementi dalla loro posizione fissa quando l’area di testo acquisiva il focus, nascondendo tutto nella pagina, per poi ripristinarli quando l’area di testo perdeva il focus.

Era molto bizzarro. Sono felice che @pmusaraj abbia introdotto un’implementazione molto più robusta.

5 Mi Piace

Il codice rilevante per entrambe le soluzioni è qui: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/safari-hacks.js

Come notato in quel file, tuttavia, rimuoveremo presto gli hack per iOS 12. iOS 14 è uscito quest’anno e solo circa il 5% dei dispositivi è ancora su iOS 12.

4 Mi Piace

Grazie per aver condiviso! :smiley:

Ho dato un’occhiata veloce al tuo workaround: a quanto pare hai scelto la strada di hardcodare le dimensioni di tutte le possibili dimensioni della tastiera?

Tuttavia, quando disattivano il suggerimento automatico, la tastiera cambia dimensione: come gestisce questa situazione?

Non sapevo che il gruppo di utenti su iOS 12 fosse così ridotto. Sei sicuro che solo il 5% rimanga su iOS 12 o versioni precedenti? In tal caso, potrebbe essere una perdita di tempo concentrarsi su quel particolare problema.

Ho verificato su iPhone 6 con iOS 2.14

La soluzione alternativa funziona perfettamente quando il suggerimento automatico è abilitato… quando il suggerimento automatico viene disabilitato, rimane uno spazio… ma come hai già affermato, il numero di utenti ancora bloccati su iOS 12 è molto basso… Ancora più basso per gli utenti bloccati su iOS 12 con il suggerimento automatico disabilitato.

Quindi la tua correzione è la migliore che potessi immaginare. Grazie per averla condivisa! :wink:

Non so se esistano dati ufficiali, ma questo grafico di Mixpanel colloca iOS 12 e versioni precedenti al 7%.

Sono pienamente d’accordo che non valga la pena impegnarsi in una correzione per iOS 12.

3 Mi Piace