在UIWebView下添加几个控件(例如一些UIButton)的最简单,最快速或其他(客观)最佳方法是什么?
为了清楚起见,我想显示一个常规的滚动UIWebView,但当滚动到达底部时,我希望在Web内容之后有一些UIControls.我宁愿不使用看起来像控件的HTML/CSS内容来伪造它; 理想情况下,它们应该是真正的控件,我可以照常连接到我的视图控制器.
我不知道用一个包含UIWebView和控件的大UIScrollView(UIScrollView和嵌套的UIWebView之间是否存在滚动冲突?)或者包含Web视图和控件的UITableView来尝试这样做是否最简单?在单独的单元格中(表现会很糟糕吗?),还是以其他方式我没有想过.
更新:我不认为我希望UIWebView本身实际滚动; 我认为我需要调整它以适应其所有内容,完全禁用其滚动行为,然后允许用户滚动其父视图(UIScrollView或UITableView)以显示UIWebView的不同部分.
您提出的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]; }