一般新闻阅读类APP都有一个功能是调节字体大小,而这类新闻界面一般是由webVIew来实现的,实际上就是怎么实时调节webView的字体大小。

写在前面

前后实验过大概有三四种方法,各有各自的优缺点,记录如下,不确保普遍适用,欢迎交流指正。

追加定位标签

<body>. . . <!-- HTML结构 --><div id="test-div"></div>
</body>

这个test-div标签不显示任何内容,它的作用就是作为一个锚点,我们通过获取这个锚点在webView的位置,确定webView的高度。

在webView加载完毕后执行JavaScript获取指定标签的位置

-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
[webView evaluateJavaScript:@"document.getElementById(\"test-div\").offsetTop" completionHandler:^(id _Nullable result, NSError * _Nullable error) {CGFloat height = [result doubleValue];NSLog(@"scrollHeight = %f", height);[self.webView mas_updateConstraints:^(MASConstraintMaker *make) {make.height.mas_equalTo(height);}];}];
}

实际运用发现这种方法获取的高度还是蛮准确的,目前项目中采用的是这种方法。不管是字体从大调到小,还是从小调到大,都能获取到准确的高度。

修改css样式

<style type=\"text/css\"> *{font-size:18.0px !important;background: #ffff32 !important;padding-right: 0px !important;padding-left: 0px !important;line-height: 1.7em !importantp{margin-top:-5px !important;}body{text-align:1.2px; color: #4A4A4A;}
</style>

只需要改变font-size:18.0px这个值,然后把html字符串重新注入WkWebView。

offsetHeight/scrollHeight

相信这个方法大家都用过

-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {[webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable result, NSError * _Nullable error) {CGFloat height = [result doubleValue];NSLog(@"offsetHeight = %f", height);}];
}

这种方法有个明显缺陷是,字体从小调到大时,OK,获取的高度没问题;但是你从大调到小时发现获取的高度几乎没有任何改变,这时候再拿来用会导致底部大片留白。
换成document.body.scrollHeight结果也是一毛一样的。
后来了解到这种现象是:
字体从小到大时webView容器不够完全显示会重新排版,并更新自己的容器,此时我们拿到的高度都是准确的,但是当字体从大调到小时,webView容器足够完全显示所有内容,认为没必要去更新容器,导致我们获取的高度是之前的高度。

为了验证上面说法,我在每次html字符串重新注入之前将webView的高度置0,这时不管怎么调拿到的高度都是准确的,但是有个一闪的效果。。。

webkitTextSizeAdjust= ‘100%’"

-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {//修改字体大小[ webView evaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '100%'" completionHandler:^(id _Nullable result, NSError * _Nullable error) {}];
}

这种方法也能修改字体大小,同样的,拿到的高度跟上面时一样的,从大到小底部会有大片留白

总结

比较以上几种方法,第一种方法效果还是不错的,但是总感觉追加一个定位标签可能会有什么隐患,还好目前没有?

WkwebView调节字体大小获取高度相关推荐

  1. Win11系统如何调节字体大小

    现在Win11系统是非常火热的系统,很多用户在升级了Win11之后发现自己很多功能都非常陌生,因为Win11很多功能都进行了大改,所以导致很多用户都对升级后的Win11系统的界面很陌生.在Win11系 ...

  2. Xshell调节字体大小和样式

    有时候没有看着字体太小的,好难受, 调节字体大小: ALT+P快捷键打开 转载于:https://www.cnblogs.com/java-synchronized/p/6667020.html

  3. 计算机考试怎么调整字号,WPS文字如何调节字体大小突破字号72的限制实现大小随意调...

    熟练掌握WPS是职称计算机考试基本要求,猎学网为考生分享WPS教程:""WPS文字如何调节字体大小突破字号72的限制实现大小随意调""内容,帮助考生备考职称计算 ...

  4. Visual Studio 2022调节字体大小

    VS2022调节字体大小 1.点击工具中的选项 2. 选择环境中的字体和颜色 3.选择自己喜欢的字体和大小   点击确定即可.   到此问题全部解决!!!

  5. wps怎么把字缩到最小_WPS文字如何调节字体大小突破字号72的限制实现大小随意调...

    WPS文字如何调节字体大小突破字号72的限制实现大小随意调 时间:2014-01-12   作者:snow   来源:互联网 使用WPS的朋友都知道字体大小只能调到72,如果想将字体大小放大是不是就没 ...

  6. php怎么调节字体大小,ps中怎么调整字体大小

    ps中调整字体大小的方法:首先打开ps软件:然后单击工具箱中的"字符"面板:最后在调整字体大小的下拉框中选择合适的字体大小,或者直接在属性栏中输入具体的数字来调整字体大小即可. p ...

  7. wps怎么把字缩到最小_如何在WPS文档中快速调节字体大小

    如何在WPS文档中快速调节字体大小 现在越来越多的人在使用WPS的软件了,不过在习惯了使用word文档以后很难对WPS 的使用转变过来,其实WPS软件有着很多的优势,也有很多地方可以让我们办公时得心应 ...

  8. 禁止移动端微信内置浏览器调节字体大小

    微信webview内置了调整字体大小的功能,用户可以根据实际情况进行调节.但是很多移动端页面的开发都是使用rem作为单位的,字体大小改变以后,会出现页面布局错乱的情况,因此希望能够禁止微信的字体放大功 ...

  9. 2021IDEA如何使用鼠标调节字体大小

    1.进入IDEA设置 或者使用快捷键Ctrl+Alt+S 2.Keymap中搜索font 3.选中Decrease Font Size,右击选中Add Mouse Shortcut 4.按住Ctrl并 ...

最新文章

  1. 如何做到微信机器人不封号_微信如何做到一键群发所有群
  2. 反思项目最新周数的反复反复修改
  3. 详解如何在vue项目中引入饿了么elementUI组件
  4. Exception in thread main java.lang.NoClassDef...
  5. The best GraphQL Loader for Webpack
  6. opencv图像处理笔记【1】:LBP算法的实现
  7. 回顾RHCE——邮件收发实验
  8. java项目-第37期基于springboot+layui实现的医院His系统【毕业设计】
  9. 【汇总】全球最吸金的30大连接器厂商
  10. pdf会签_工作流系统中会签功能的设计与实现.pdf
  11. 2021年R2移动式压力容器充装报名考试及R2移动式压力容器充装操作证考试
  12. 分享史上Java最牛逼,最简短的代码
  13. 学习FPGA之四:FPGA开发方法
  14. 基于STM32HAL库ADC+DMA模式,高精度采集电池电量与芯片内部温度方法 (48脚 使用内部参考电压方案)
  15. MTK平台Metadata的加载(3)——其他Static和Request加载
  16. Z世代偏爱怀旧IP,B站UP主不可忽视的流量蓝海
  17. 专业显卡深度学习_学习深度学习,如何选购显卡?
  18. 批量修改照片(图片)格式、批量旋转照片方向(图片)、批量命名照片(图片)
  19. linux_安装jdk-8u333
  20. 列表框(ListBox)

热门文章

  1. Rust + GO 大战 C/CPP + JAVA
  2. 从苏宁电器到卡巴斯基第35篇:番外篇——晒一晒病毒分析师的桌面(下)
  3. java 保存微信表情_Java微信公众号开发之用户表情存储解决方案
  4. 颜色恒常性评价指标——角度误差【弧度角度】避坑
  5. 吉信通php 短信配置,吉信通:手机APP为什么要用短信验证?
  6. 3D打印机T3升级corexy  制作过程(一)
  7. 易基因|病毒抗性:全基因组DNA甲基化揭示草鱼年龄相关病毒易感性的表观遗传机制
  8. word2016如何从指定页面设置页码
  9. Mysql使用Key/Value方式存储动态扩展字段、对象与HashMap的相互转化
  10. Oracle事件诊断列表