您提出的 UIScrollView 和 UITableView 解决方案都不起作用。
如果将 UIWebView 放在 UIScrollView 中,则其中一个将拦截滚动并滚动其内容窗格,但另一个不会。我不确定哪个会,我认为它会是 UIScrollView。在任何情况下,当您到达 UIWebView 中的滚动结束时,没有规定 UIScrollView 滚动,反之亦然。
如果您使用 UITableView,UIWebView 将在其单元格内滚动,但 UITableView 根本不会滚动,或者 UIWebView 根本不会滚动,而 UITableView 会。如果您使用“分组”表格样式,您可以滚动 UIWebView 和 UITableView,但这不是您正在寻找的那种有凝聚力的体验。
我能想到的唯一可行的技术是在 UIWebView 的内部进行处理,并将包含按钮的 UIView 添加到 UIWebView 使用的滚动实体中。这超出了我的理解,但是这些标头转储将帮助您入门。请记住,如果 Apple 注意到您在做什么,他们可能会拒绝您的应用程序,此外,内部结构可能随时更改,从而破坏您的代码。如果您走这条路,请尝试以这样一种方式对其进行编码,即缺少功能会导致正常失败。
编辑:
经过一些讨论和试验,我和 OP 得出的结论是,这是非常有可能的,并且有一种完全不依赖内部结构的方法来做到这一点。也就是说,使用封闭的滚动视图,并在 Web 视图加载到其自己的内容视图的完整大小后调整其大小。这个尺寸可以使用 [webView sizeThatFits:CGSizeZero] 找到。
如果您确实想使用 UIWebView 的私人信息来完成此操作,我有一个简短的代码示例,用于向 UIWebView 的文档视图添加视图,因为无论如何我都解决了:)
- (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];
}