Ni las soluciones UIScrollView ni UITableView que haya propuesto funcionarán.
Si coloca UIWebView en UIScrollView, una u otra interceptarán las volutas y desplazarán su panel de contenido, pero la otra no. No estoy seguro de cuál será, creo que sería UIScrollView. En cualquier caso, no hay ninguna disposición para que UIScrollView se desplace cuando llegue al final del desplazamiento en UIWebView, o viceversa.
Si utiliza un UITableView, UIWebView se desplazará dentro de su celda, pero el UITableView no se desplazará en absoluto, o el UIWebView no se desplazará en absoluto, y el UITableView lo hará. Si usa el estilo de tabla "agrupada", es posible que pueda desplazarse por UIWebView y UITableView, pero no sería la experiencia cohesiva que está buscando.
La única técnica que se me ocurre que podría funcionar es ensuciar las partes internas de UIWebView y agregar los botones que contienen UIView y otras cosas a la entidad de desplazamiento utilizada por UIWebView. Esto está más allá de mi alcance, pero these header dumps will get you started. Tenga en cuenta que si Apple se da cuenta de lo que está haciendo, pueden rechazar su aplicación y, además, las partes internas pueden cambiar en cualquier momento, rompiendo su código. Si sigue esta ruta, intente codificarlo de tal forma que la funcionalidad faltante cause una falla elegante.
EDIT:
Con un poco de discusión y experimentación, el PO y he llegado a la conclusión de que es muy posible, y hay una manera de hacerlo que no se basa en elementos internos en absoluto. Es decir, use una vista de desplazamiento adjunta y cambie el tamaño de la vista web una vez que se haya cargado al tamaño completo de su propia vista de contenido. Este tamaño se puede encontrar usando [webView sizeThatFits: CGSizeZero].
Si quería usar soldados de UIWebView de lograr esto, tengo un ejemplo de código corto de añadir una vista a la vista el documento de la UIWebView, ya lo tengo todo planeado de todos modos :)
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
UIView* testView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
UIWebView* testWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
[testView addSubview:testWebView];
[testWebView setDelegate:self];
[testWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]];
[window addSubview:testView];
[window makeKeyAndVisible];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
UIView *insert = [[[UIView alloc] initWithFrame:CGRectMake(0, [[webView _documentView] frame].size.height, 320, 40)] autorelease];
[insert setBackgroundColor:[UIColor greenColor]];
[[webView _documentView] addSubview:insert];
}
terminé fingiendo con HTML y CSS. -webkit-appearance: pulsador hace que esto sea más agradable. El problema con el enfoque "one large UIWebView" es que las vistas tienen un tamaño máximo de 1024x1024 píxeles, por lo que no se puede cargar necesariamente una página completa en una y colocarla dentro de UIScrollView. Debería ser posible cortar una página grande en páginas más pequeñas y usar un UIWebView por separado para cada parte, pero esta parecía ser una solución peor que simplemente ceder y hacer que los botones formen parte del contenido de la página real. –