彻底控制WKWebView的缩放

如题所述

第1个回答  2022-07-17

我们在做项目的时候经常可能会遇到需要 禁止WKWebView缩放 的需求。

并且同时我们可能还想要 手动去控制网页的缩放比例

修改webView内的scrollView的代理,让webview没有东西是可以被缩放的。

wkwebview在加载网页之后,会先自动适应缩放一次,如果这么做了会导致 无法按系统建议的缩放比例正确的显示 ,并且此时你 无法手动控制缩放比例 调整到合适的比例,也无法调整到自己想要的比例。(因为此时代理中已经没有元素可以用来缩放了)

在html网页里边的mata标签加入user-scalable = no,若是原生js交互的话可采用注入js的方法更改meta。

这样做的缺点,同样是你无法再手动控制缩放比例了,并且在双击、或者遇到文本输入的时候,可能还是会自动缩放。

其实我们只需要在上述第一种方法的基础上做一些完善即可。
设一个开关跟scrollView的delegate关联起来即可,让它只有在我们允许的情况下缩放。

废话^ _ ^

我们在webview的控制类中,设立一个控制属性,比如

我们让它初始值为YES,这样在webview刚加载出网页的时候,可以让系统为我们进行合适的缩放。(如果不需要也可以一开始就设为NO)

控制scrollView的代理,让它只有在我们允许的时候,才能缩放

在网页加载完之后,(此时系统已经为我们缩放了网页),关闭缩放控制

经过刚才 第四步 之后,网页已经不允许再缩放了,手动设zoomScale也没用。
所以这个时候,如果需要手动调整网页缩放比例,或者是再加载下一个网页,只需要再把控制开关打开即可。