objective c - iOS UIWebView dentro de UIScrollView
objective-c (1)
Quiero tener UIWebView
dentro de UIScrollView
. El UIWebView a veces saldrá de los límites de la pantalla del iPhone, así que necesito una forma de desplazar la vista para que pueda ver todo el contenido (pero no quiero usar el desplazamiento integrado de UIWebView). Así que estoy pensando en poner todo el contenido dentro de UIScrollView y luego hacer que el alto de UIScrollView sea igual al alto de UIWebView y otras vistas que hay en él.
Aquí hay una imagen para ayudar a describir mi problema:
Hice exactamente lo mismo. Así es como lo hice funcionar:
- Agregue UIWebView como una subvista de UIScrollView (obviamente ;-)
- Deshabilite el desplazamiento nativo de UIWebView (puede hacerlo al recorrer las subvistas de UIWebView hasta que encuentre que es UIScrollView y establecer scrollEnabled = NO en él).
- Establezca el tamaño de contenido de su UIScrollView y el marco de UIWebView en el tamaño del contenido HTML de UIWebViews.
El último punto es un poco complicado porque no puede estar seguro de que el HTML se represente por completo cuando se llama a webViewDidFinishLoad: en el UIWebViewDelegate.
Esta es una forma confiable de obtener el tamaño del contenido HTML:
1. Agregue una función de JavaScript al HTML que se llama cuando el documento HTML está listo:
window.onload = function() {
window.location.href = "ready://" + document.body.offsetHeight;
}
Esta función envía una solicitud que tiene la altura del contenido en su URL.
2. En su UIWebViewDelegate intercepta esta solicitud:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [request URL];
if (navigationType == UIWebViewNavigationTypeOther) {
if ([[url scheme] isEqualToString:@"ready"]) {
float contentHeight = [[url host] floatValue];
yourScrollView.contentSize = CGSizeMake(yourScrollView.frame.size.width, contentHeight + yourWebView.frame.origin.y);
CGRect fr = yourWebView.frame;
fr.size = CGSizeMake(yourWebView.frame.size.width, contentHeight);
yourWebView.frame = fr;
return NO;
}
return YES;
}
Espero que ayude
ACTUALIZAR
Aquí está la versión de Swift 2:
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
guard navigationType == .Other else { return true }
if let url = request.URL, let host = url.host {
guard url.scheme == "ready" else { return true }
if let contentHeight = Float(host) {
yourScrollView.contentSize = CGSizeMake(yourScrollView.bounds.size.width, CGFloat(contentHeight))
var fr = webView.frame
fr.size = CGSizeMake(fr.size.width, CGFloat(contentHeight))
webView.frame = fr
}
return false
}
return true
}