hice exactamente lo mismo. Así es como yo hice que funcionara:
- Añadir la UIWebView como una vista secundaria de la UIScrollView (obviamente ;-)
- Desactivar el desplazamiento natural de la UIWebView (se puede hacer eso por iteración a través de los subvistas del UIWebView hasta que encuentre que es UIScrollView y establecer scrollEnabled = nO en él.
- Ajuste el contentSize de su UIScrollView y el marco de la UIWebView al tamaño del contenido UIWebViews HTML.
el último punto es poco complicado porque no se puede asegúrese de que el HTML esté completamente dered cuando webViewDidFinishLoad: se llama en el UIWebViewDelegate.
Aquí está una manera confiable para obtener el tamaño de contenido HTML:
1.Add una función JavaScript para el código 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.In su UIWebViewDelegate que 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
ACTUALIZACIÓN
Aquí está la versión 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
}
Puede alguien
traducirlo a veloz? –
@YestayMuratov Perdón por la respuesta tardía. Agregué una versión Swift 2 a mi respuesta – joern
@joern que no funcionará si el contenido HTML tiene algo así como el enlace "Mostrar más" con JS adjunto (para expandir o cargar y expandir un artículo), ¿verdad? – OgreSwamp