针对获取webView高度问题之前写过一个方案——通过监听WebView的scrollView的变化来实时更新高度 附上链接: iOS【终极方案】精准获取webView内容高度,自适应高度

本文是给出第二种方案,解决网页内大量图片、动图导致的内容高度获取不准确: 直接上代码:

#pragma mark ————— 给每个Img标签添加JS事件 —————
-(void)webViewDidFinishLoad:(UIWebView *)webView
{NSString *js = @"var imgs = document.getElementsByTagName(\"img\");""for(var i=0;i<imgs.length;i++){""  var img = imgs[i];""  img.onload=function(){window.location.href=('yourAppUrlSchemes://ImgLoaded');}""}";//yourAppUrlSchemes 是在 info.plist - URL Types里设置的当前URL Schemes [webView stringByEvaluatingJavaScriptFromString:js];
}#pragma mark =============== 拦截webview的请求,获取网页中最后一个可视元素的位置 ===============
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {NSString *urlString = [[request URL] absoluteString];urlString = [urlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSArray *urlComps = [urlString componentsSeparatedByString:@"://"];NSLog(@"urlString=%@---urlComps=%@",urlString,urlComps);if (urlComps.count==2&&[urlComps[1] isEqualToString:@"ImgLoaded"]) {//imgload 图片加载完成,重新获取高度CGSize fittingSize = [_webView sizeThatFits:CGSizeZero];//此处我获取的是网页中倒数第三个标签的位置,可以根据要加载的网页结构设定取倒数第几个标签的位置可以代表整个网页高度CGFloat lastHeight =[[_webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(\"body\")[0].children[document.getElementsByTagName(\"body\")[0].children.length-3].offsetTop"] floatValue];NSLog(@"webView:%@",NSStringFromCGSize(fittingSize));_webView.frame = CGRectMake(0, 0, fittingSize.width, lastHeight);[self.tableView beginUpdates];[self.tableView setTableHeaderView:_webView];[self.tableView endUpdates];}return YES;
}复制代码

上述思路是通过给每个img标签添加onload事件,事件执行内容就是给APP自身发送通知,APP在shouldStartLoadWithRequest 回调内截获将要发出的请求,并重新计算网页内容高度。

这是一个取巧的办法,不够灵活,实践证明能够解决固定结构的网页高度获取,对于不确定结构的网页,建议不要使用此方法,容易有误差。

大神们有解决这类问题的完美办法还望及时联系我,为了帮到更多人~

以上属于臭码农原创,若有雷同属巧合,如有错误望指正,转载请标明来源和作者。 by:臭码农

转载于:https://juejin.im/post/5a323eab518825569539abf4

iOS 【奇巧淫技】获取webView内容高度相关推荐

  1. iOS【终极方案】精准获取webView内容高度,自适应高度

    关于WebView内容高度的获取,相信很多人都踩过坑,无法获取到准确高度,导致页面布局出现差错,搜到的资料很多但都无法解决问题,以下是个人经验总结: 项目需求实现H5文章&原生评论效果,文章是 ...

  2. iOS开发 精准获取webView内容高度

    监听!!!! 给webView的scrollView的contentSize属性添加监听,每当内容发生变化,contentSize一定会跟着变,捕获这个变动,在监听方法中实现webViewDidFin ...

  3. iOS 获取WKWebView内容高度做H5原生连接

    前言:是这样的,刚写完上一篇文章还没缓过神来,上一篇文章我还提到了,想和大家聊聊原生+H5如何无缝连接的故事.结果我朋友就给我发了两篇他的作品.他的做法也都有独到之处.好的文章都是这样,让你每次看都能 ...

  4. iOS 开发的一些奇巧淫技

    iOS开发的一些奇巧淫技1&2 CGfloat和float的区别? 现在上架的app都要求支持64位系统,那么CGFloat和float的区别就在这里.command+左键点击CGFloat. ...

  5. 【奇巧淫技】python 助你每天早上八点自动发送天气预报邮件到QQ邮箱

    此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉. 补充 有不少杠精小婊贝留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!! ...

  6. 位运算概览与奇巧淫技

    文章目录 一.位运算概述 二.位运算概览 异或 二进制数的原码.反码.补码 左移 << 右移 >> 无符号右移 >>> 三.位运算的使用奇巧淫技 判断奇偶数 ...

  7. 算法很美第一章 位运算的奇巧淫技

    第一章 位运算的奇巧淫技 1.2 题解:如何找数组中唯一成对的那个数 知识点: A^A=0 A^0=A(一个数与0进行按位异或,结果是他自己) 对一个序列进行按位异或,可以消除掉序列中的重复项,比如: ...

  8. 蓝桥杯算法竞赛系列第一章——位运算的奇巧淫技及其实战

    遇见蓝桥遇见你,不负代码不负卿! 第二章"递归"已将更新咯,欢迎铁汁们点评!蓝桥杯算法竞赛系列第二章--深入理解重难点之递归(上)_安然无虞的博客-CSDN博客 目录 一.位运算符 ...

  9. iOS开发的一些奇巧淫技3

    CGfloat和float的区别? 现在上架的app都要求支持64位系统,那么CGFloat和float的区别就在这里.command+左键点击CGFloat. 1 typedef CGFLOAT_T ...

最新文章

  1. 灵活而又可怕的params参数数组
  2. 浅谈ICA算法的概念、本质和流程
  3. 0 有符号和无符号整型数字
  4. element-ui表单验证:用户名、密码、电话、邮箱
  5. .NET Core 如何判断程序是否在远程桌面(RDP)下运行
  6. Python3条件判断
  7. 【HDU - 4597】Play Game(博弈dp)
  8. Linux /proc目录详解
  9. 【云速建站】SSL证书自助部署
  10. [SDOI2007] 单词接龙游戏 dp
  11. SQLite 事务控制
  12. Java使用easyExcel操作Excel案例
  13. php调用redis的scan,hscan,zscan 命令
  14. MySQL理解索引、添加索引的原则
  15. 范德堡大学计算机专业课程,2020年范德堡大学专业设置
  16. mysql查询某学期开设的课程_求各学期开设的课程门数
  17. mysql5.7.26搭建MGR单主及多主模式
  18. 音视频开发工程师学习之路
  19. windows功能_【各种功能升级】微信windows版v2.9新体验
  20. 【两次过】【2017腾讯】字符移位

热门文章

  1. TX2(Ubuntu16.04)安装TP-link外接网卡驱动及AP热点创建
  2. 给元素设置鼠标移入后变为手型的属性
  3. android平台的开源框架的思考
  4. HCIP课程笔记-04-HDLC、PPP、GRE
  5. C++:实现量化期权交易CDS加密货币衍生品测试实例
  6. LSVGlobal Mapper应用----地形裁剪
  7. 日历插件:Bootstrap的datetimepicker插件
  8. CPA十二--外币会计报表折算的方法(转载)
  9. Hazelcast IMDG参考中文版手册-第四章-配置
  10. 零基础一次通过软考网络工程师经验分享