Em que situações pode surgir um estado em que a entrada do utilizador está desativada (interação do utilizador desativada) e o Vue não consegue processar eventos de toque?
sobes.tech IA
Resposta da IA
O estado user interaction enabled false ao nível de UIView no iOS significa que este UIView e as suas subvisualizações não podem receber eventos de toque.
Situações em que isso pode ocorrer e afetar o processamento de eventos por componentes Vue integrados, por exemplo, através de WKWebView:
- Sobreposição de vista transparente: Se uma outra vista com
isUserInteractionEnabled = trueestiver sobreposta aoWKWebViewe a cobrir total ou parcialmente, os eventos de toque serão interceptados pela vista superior e os componentes Vue noWKWebViewnão os receberão. - Desativação da interação no
WKWebView: A propriedadeisUserInteractionEnableddo próprioWKWebViewestá definida comofalse. Isto desativa completamente o tratamento de toques dentro da vista web. - Desativação da interação na vista pai do
WKWebView: Se oWKWebViewfor uma vista filha de umUIViewe esteUIViewtiverisUserInteractionEnabled = false, então todas as suas vistas filhas, incluindo oWKWebView, também não receberão eventos de toque. - Vistas modais ou controladores de alerta: A exibição de uma vista modal (
UIViewController.present) ou de um controlador de alerta do sistema sobre a vista principal que contém oWKWebViewintercepta todos os eventos de toque até que a vista modal ou o alerta sejam fechados. - Animações: Durante algumas animações, a interação com a vista pode ser temporariamente desativada para evitar ações indesejadas do utilizador durante a animação.
- Operações em segundo plano prolongadas: Em arquiteturas antigas ou com implementações incorretas, durante tarefas em segundo plano prolongadas (como carregamento de dados), a interação com a UI pode ser incorretamente desativada para impedir ações do utilizador até que a operação termine.
- Erros no Auto Layout: Configurações incorretas de Auto Layout podem fazer com que o
WKWebViewseja invisível (tamanho 0, escondido atrás de outra vista) ou que o seu frame esteja fora da tela, o que na prática o torna inativo para a interação do utilizador.
No contexto do Vue, que funciona dentro do WKWebView, todas essas causas específicas do iOS podem fazer com que os eventos touchstart, touchend, click, etc., necessários para o funcionamento das diretivas Vue (v-on:click, @tap no Quasar/Ionic Vue) ou para o tratamento direto de eventos, simplesmente não cheguem ao código JavaScript no WKWebView. A depuração nesta situação requer verificar a hierarquia de vistas no Xcode (ViewController Hierarchy Debugger) e o estado da propriedade isUserInteractionEnabled em diferentes níveis.