关于UIWebView一个很奇怪问题的另类解决办法(高度递增问题)

iOS开发 同时被 2 个专栏收录
40 篇文章 0 订阅
11 篇文章 0 订阅

近来在处理的一个iPad上的app,用到了UIWebView显示广告,广告有竖屏和横屏两种不同的形式。处理方法不难,创建广告webview,设置frame,加入到view中。旋转的时候分别load对应的广告html地址,再设置webview的frame。几句代码,功能实现了,测试也通过了。但多旋转几次,会发现有个奇怪的问题,广告html会不断被拉伸,高度越来越大。输出log,看到webview中的contentSize中的height每次递增8像素。原来是这个原因,估计是旋转时,webview的宽度有变化,所以高度也相应的缩放就慢慢增大了。找到了原因,重设contentSize就可以了嘛。事实往往跟想象是有差距的,一测试,问题依旧。这下傻眼了,重设了contentSize,但完全没效果。再想一下,会不会是有什么属性可以控制它的内容不随大小而缩放的呢,找了一遍,没找到相应的属性。各种属性都试过了,包括scalesPageToFit,通过stringByEvaluatingJavaScriptFromString利用javascript语句设置contentsize高度,reload等等方法,问题依旧,还是解决不了。

正在迷茫之际,想想看是不是设置错了subview了。之前试过直接设置uiwebview的scrollview的frame,但没看到有效果。会不会还有其他subview。于是试着遍历UIWebView的所有subview,结果无意发现有个UIWebBrowserView的子视图,看看名字觉得这个象是真正显示web的视图。于是试试打印这个view的大小,并修改成需要的尺寸,结果惊奇的发现,之前递增的8像素就是它增加的,而重设了大小后,拉伸情况再也没出现了。shit,忍不住爆了一句粗口,想不到改个大小还要费这么大的劲。是自己了解不多还是api的bug呢,想不懂,之前查阅资料的时候,也看过有人问过类似的问题(问题地址:http://www.devdiv.com/forum.php?mod=viewthread&tid=194580),但没看到有解决办法。希望以后可以了解到解决这个问题的正统方法。也望有高手能指点迷津,以解开我这个疑问。

解决的代码如下:

- (void)fitContentForWebviewResize
{
    for (UIView *subview in m_adView.subviews)
    {
        NSLog(@"subview class %@", NSStringFromClass([subview class]));
        if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        {
            for (UIView *subview2 in subview.subviews)
            {
                NSLog(@"subview class %@", NSStringFromClass([subview2 class]));
                if ([[subview2 class] isSubclassOfClass: NSClassFromString(@"UIWebBrowserView")])
                {
                    CGRect scrollFrame = subview2.frame;
                    NSLog(@"%@", NSStringFromCGRect(scrollFrame));
                    subview2.frame = CGRectMake(0, 0, m_adView.frame.size.width, 100);
                    break;
                }
            }
            CGRect scrollFrame = subview.frame;
            NSLog(@"%@", NSStringFromCGRect(scrollFrame));
            break;
        }
    }
}

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值