Desplazamiento de UIWebView después del foco del campo de text

Tengo UIView y UIWebView en la pantalla. Cuando hago clic en el campo de text en el website, el contenido de la vista web está aumentando. ¿Cómo podría obligar a UIView a moverse también entonces?

Puede suscribirse a UIKeyboardWillShowNotification o UIKeyboardDidShowNotification , y mover su UIView cuando reciba la notificación. Este process se describe aquí:

Guía de progtwigción de text, web y edición para iOS : "Mover contenido que se encuentra debajo del keyboard"

Tal vez esto ayude: no quería que el UIWebView se desplazara en absoluto, incluso al enfocarse en un campo de text.

Tienes que ser el delegado de UIWebView:

 _webView.scrollView.delegate = self; 

Y luego agrega este método

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { scrollView.contentOffset = CGPointZero; } 

UIWebView tiene una callback:

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

Esto se activa cada vez que una nueva request de URL está a punto de cargarse. Desde javascript, puede activar una nueva URL de request en el evento onfocus de la label, con un esquema personalizado como:

 window.location = "webViewCallback://somefunction"; 

Aquí hay un script para poner su evento personalizado dentro de cualquier página html para cargar.

Tendrá que get el HTML completo antes de cargarlo en UIWebView así:

 NSString *html = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"your URL"] encoding:NSUTF8StringEncoding error:nil]; 

A continuación, inserte lo siguiente dentro del text HTML en un lugar apropiado:

 <script> var inputs = document.getElementsByTagName('input'); for(int i = 0; i < inputs.length; i++) { if(inputs[i].type = "text") { inputs[i].onfocus += "javascript:triggerCallback()"; } } function triggerCallback() { window.location = "webViewCallback://somefunction"; } </script> 

Luego, en la callback debe hacer algo como esto:

 -(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { if ( [[inRequest URL] scheme] == @"webViewCallback" ) { //Change the views position return NO; } return YES; } 

Eso es. Espero eso ayude.

Wow, tuve el mismo problema hace unos días, fue realmente molesto. Me di count de que window.yPageOffset está cambiando, pero por lo que sé, no hay events que vincular cuando cambie. Pero tal vez te ayude de alguna manera. D

Creo que scrollViewDidScroll mal. Necesita implementar una class personalizada para UIWevView y sobreescribir scrollViewDidScroll :

  - (void) scrollViewDidScroll:(UIScrollView *)scrollView{ [super scrollViewDidScroll:scrollView]; [((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView]; }