关于WebView内容高度的获取,相信很多人都踩过坑,无法获取到准确高度,导致页面布局出现差错,搜到的资料很多但都无法解决问题,以下是个人经验总结:

项目需求实现H5文章&原生评论效果,文章是加载H5链接,评论信息是后台接口提供,以列表形式展示。

实现思路:

1. webView加载H5链接,设置它为tableView的 headerView,下方评论信息用Cell加载展示。

2. 在webView的回调方法webViewDidFinishLoad中获取网页内容高度,设置为webView的高度,重新将webView赋给tableView的headerView。

Tip: 将一个View赋值给UITableView的tableHeaderView时,不需要手动设置高度,HeaderView会自动使用View的高度。

像上面这样,类似的方法很多,无论是JS获取,还是contentSize获取,最后结果都难以获取到准确高度,并非方法不行,而是:

webViewDidFinishLoad代理方法被调用时,页面并不一定完全展现完成,可能有图片还未加载出来,导致此时获取的高度是并不是最终高度,过会儿图片加载出来后,浏览器会重新排版,而我们在这之前给了一个错误高度,导致显示异常。

问题原因已确定,解决思考:

如何能在webViewDidFinishLoad之后获取到网页内容高度的变化?

答案:监听

具体实现过程:

给webView的scrollView的contentSize属性添加监听,每当内容发生变化,contentSize一定会跟着变,捕获这个变动,在监听方法中实现webViewDidFinishLoad中的代码,也就是获取最新的内容高度赋给webView

另外,在cell中使用webView获取高度不准确的解决办法跟上面一样,只不过需要注意cell中使用webView涉及到cell重用,会导致滑动列表时webView多次加载,影响性能,建议缓存高度。

注意:

如果不走监听,要先怀疑自己,不要怀疑我!

1. 确保webview已经加在页面上了,并且能够正常显示,然后再继续获取内容高度,如果都显示不了,别来找我!

2. 是给webview的scrollview添加监听,不要加在webview上,否则累死你也不会走监听方法!

3. 如果你用的是swift,那请先看这篇文章:Swift中KVO(监听)的使用方法及注意事项

若上述方式解决不了你的问题,请尝试另一方案: iOS 【奇巧淫技】获取webView内容高度

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

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

iOS【终极方案】精准获取webView内容高度,自适应高度相关推荐

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

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

  2. iOS 【奇巧淫技】获取webView内容高度

    针对获取webView高度问题之前写过一个方案--通过监听WebView的scrollView的变化来实时更新高度 附上链接: iOS[终极方案]精准获取webView内容高度,自适应高度 本文是给出 ...

  3. js实现textarea根据内容大小自适应高度

    首先,我们来看看源代码: /** * 文本框根据输入内容自适应高度 * @param {HTMLElement} 输入框元素 * @param {Number} 设置光标与输入框保持的距离(默认0) ...

  4. 【转】 Android WebView内容宽度自适应

    我们平常在项目中有可能会遇到网页的内容是通过json数据传递到app上面用WebView来显示的,这时候我们通常都要调整内容的总宽度不超过父容器的宽度,这样子用户可以不用左右滑动就可以看到全部的内容. ...

  5. 动态获取并设置 iframe 自适应高度

    实际需求:页面中有一些固定元素 + 内嵌 iframe 页面,此时如果给 iframe 设置固定高度会导致 iframe 内部滚动,体验不佳. 于是需要动态获取 iframe 实际高度并设置,但有些 ...

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

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

  7. IOS UITextView自适应高度

    LOFTER app需要实现了一个类似iPhone短信输入框的功能,它的功能其实蛮简单,就是:[UITextView的高度随着内容高度的变化而变化].实现思路应该是: 在UITextView的text ...

  8. Iframe用法的详细讲解(属性、透明、自适应高度)和html中滚动条属性设置

    Iframe 用法的详细讲解(属性.透明.自适应高度)和html中滚动条属性设置 scrollbar属性.样式详解 1. overflow内容溢出时的设置(设定被设定对象是否显示滚动条) overfl ...

  9. 解决子级用css float浮动 而父级div没高度不能自适应高度

    当在对象内的盒子使用了float后,导致对象本身不能被撑开自适应高度,这个是由于浮动产生原因. 方法一:对父级设置固定高度 此方法可用于能确定父级div内子级对象高度. 缺点: 父级是固定高度,而不随 ...

最新文章

  1. KDE社区:首个KDialogue正式开放
  2. 微信公众号接口权限表汇总
  3. PTA浙大版python程序设计题目集--第1章-2 从键盘输入三个数到a,b,c中,按公式值输出 (30 分)
  4. Java:AspectJ的异常翻译
  5. 考研过程中最容易犯的八大错误
  6. centos 7.2 配置Nginx
  7. 15 JS运算符优先级
  8. 牛客 Algorithm Choosing Mushrooms
  9. vue 中的const {XXX } =this 的作用效果
  10. 【数学】微积分的大用处
  11. 神锁离线版插件的安全设计
  12. 手把手教你,如何用Python做副业月入10000+!
  13. web--拉灯泡切换黑天与白夜的精美动画
  14. Js上传图片到七牛云(直接上代码)
  15. 基于javaweb的医院病历信息管理系统(java+ssm+jsp+bootstrap+easyui+mysql)
  16. 云服务器ecs增加带宽,老鸟告诉你云服务器带宽多少合适?
  17. python实现北京租房信息计算
  18. python 图灵 微信 菜谱_python——wxpy模块实现微信尬聊(基于图灵机器人)-Go语言中文社区...
  19. 移动端开发常用的vue组件
  20. okcc呼叫中心外呼系统与电话营销系统跟呼叫中心系统有区别吗?

热门文章

  1. 将navigationbar的translucent属性设为No后,子控制器视图整体下移问题
  2. APUE 学习笔记(三) 文件和目录
  3. 如何在Android 4.0 ICS中禁用StatusBar | SystemBar | 状态栏 【完美版】
  4. 3G手机Android应用开发视频教程_黎活明老师的视频(第五天课程)总共有八天课程...
  5. Java Map 自定义排序
  6. iframe高度自适应的实现
  7. socket中的几个数据结构
  8. AndroidStudio_安卓原生开发_判断蓝牙_定位是否开启---Android原生开发工作笔记162
  9. C#串口通信工作笔记0002---上位机开发_嵌入式_串口助手_控制下位机的开关
  10. jsp中的四种对象作用域