将子视图添加到UIWebView的内部滚动视图

时间:2015-01-25 16:43:23

标签: ios objective-c uiwebview

我的目标是将Google DFP广告管理系统标题视图(横幅广告)添加到HTML页面,并在iPad上滚动显示HTML。

使用UIWebView显示HTML,这在iOS上是正常的。

如何将DFP广告管理系统标题视图(继承自UIView)与内容对齐,以便滚动,就好像它是页面的一部分一样?

到目前为止我做了什么:

  • UIWebView具有*scrollview属性。
  • 遍历webview.scrollview的子视图。
  • 对于每个视图,调整框架以将其向下移动 按横幅的高度,使它们的数量相同。
  • 将横幅广告视图插入网络视图的scrollview

    for (UIView *view in self.webview.scrollView.subviews) {
        CGRect frame = view.frame;
        frame.origin.y += bannerAdvertsHeight;
        frame.size.height -= bannerAdvertsHeight;
        view.frame = frame;
    }
    
    [self.webview.scrollView addSubview:self.dfpBannerView];
    

我目前无法访问iPad,但这可以在模拟器上运行。我不确定这是否是一个“好”的解决方案。如果您认为我的方法存在任何问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

这是UIWebView的视图层次结构:

(gdb) po [webView recursiveDescription]
<UIWebView: 0x68220e0; frame = (0 0; 320 460); >
| <UIScrollView: 0x4b2bee0; frame = (0 0; 320 460); >
|    | <UIImageView: 0x4b2dca0; frame = (0 0; 54 54); >
|    | <UIImageView: 0x4b2da20; frame = (0 0; 54 54); >
|    | <UIImageView: 0x4b2d9c0; frame = (0 0; 54 54); >
|    | <UIImageView: 0x4b12030; frame = (0 0; 54 54) >
|    | <UIImageView: 0x4b11fd0; frame = (-14.5 14.5; 30 1); >
|    | <UIImageView: 0x4b11f70; frame = (-14.5 14.5; 30 1); >
|    | <UIImageView: 0x4b11f10; frame = (0 0; 1 30); >
|    | <UIImageView: 0x4b11eb0; frame = (0 0; 1 30); >
|    | <UIImageView: 0x4b11e50; frame = (0 430; 320 30); >
|    | <UIImageView: 0x4b2d0c0; frame = (0 0; 320 30);  >
|    | <UIWebBrowserView: 0x6005800; frame = (0 0; 320 460); >

查看层次结构,您应该将横幅添加到UIWebBrowserView,如果没有,则应将其添加到其上:

for (id view in self.webview.scrollView.subviews) {
    if (![view isKindOfClass:[UIImageView class]]) {
        CGRect frame = view.frame;
        frame.origin.y += bannerAdvertsHeight;
        frame.size.height -= bannerAdvertsHeight;
        view.frame = frame;
    }
} 
[self.webview.scrollView addSubview:self.dfpBannerView];

虽然这是一种黑客行为,但您可能会在以后的iOS更新中遇到麻烦。