Estoy cargando una cadena HTML de longitud arbitraria en un UIWebView
que luego se muestra en un UITableViewCell
. No quiero que UIWebView
se desplace independientemente del UITableView
, así que debo redimensionar su altura para que se ajuste al contenido.Cambiar el tamaño de la altura UIWebView para que se ajuste al contenido
Este UITableViewCell
también es colapsable, no muestra el UIWebView
cuando está en estado colapsado.
El problema es, ¿cómo sé cuál es esta altura para que pueda tener heightForRowAtIndexPath
devolver un valor adecuado y permitir que la mesa se vea y se desplace correctamente?
Aquí hay un código de ejemplo:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0)
return 286;
if (indexPath.row == 1) {
if (analysisExpanded)
return analysisWebViewHeight + 39;
else
return 52;
}
if (sourcesExpanded)
return sourcesWebViewHeight + 39;
return 53;
}
bastante simple. El 39 es la altura de algunas cosas de encabezado que tengo en la celda con la vista web.
Estoy cargando la "visión ampliada" de la célula a partir de una semilla, por lo que para obtener la vista web que estoy llamando viewForTag:
UIWebView* sourcesWebView = (UIWebView*)[cell viewWithTag:1];
[sourcesWebView setBackgroundColor:[UIColor clearColor]];
[sourcesWebView loadHTMLString:placeholder baseURL:[NSURL URLWithString:@"http://example.com/"]];
sourcesWebViewHeight = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] floatValue];
[sourcesWebView setFrame:CGRectMake(sourcesWebView.frame.origin.x, sourcesWebView.frame.origin.y, sourcesWebView.frame.size.width, sourcesWebViewHeight)];
sourcesWebViewHeight
es una Ivar que se actualiza por el código anterior en cellForRowAtIndexPath
. Si el usuario toca la celda tres veces, expandir-colapsar-expandir, y hace un poco de desplazamiento, eventualmente obtiene la altura correcta.
Intenté "precargar" la altura utilizando un objeto UIWebView
de solo memoria, pero nunca devolvió los números correctos por algún motivo.
Apple (en la documentación de UIWebView) dice estrictamente que no use UIWebView en UITableView. – makboney
hemos publicado varias aplicaciones con vistas web como celdas sin ningún problema – Denis
Más y mejores respuestas a la misma pregunta se pueden encontrar [aquí] [1] también. [1]: http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview –