WKWebView高度获取不准确,解决办法

WKWebView高度获取不准确,解决办法

一般APP含有详情页,目前主流做法,上面放个WKWebView(iOS8之后),下面原声拼接(评论或展示的Cell).

很多人遇到WKWebView高度获取不准确,例如问题:下面一片空白,高度一直在增加,上拉刷不动,各种问题。

获取高度一般用kvo或者js,我是使用kvo监听.

获取不到高度,换下URL,百度什么的试试,先排除下。

我的做法,代码是没问题的,试了几个URL,也正常加载出来,只有公司的有问题,和H5讨论下,果然问题描述完,他告诉我,高度塌陷。

H5这边只改了几句代码,我再测试,完美加载。~~~~

贴下H5改的代码

此图的高度是正确的

页面查看的高度,不能是你看见屏幕的高度,而是内容的全部高度

在这里插入图片描述
heighe不要设置成100%,基本的H5按照这样写,iOS 或者安卓拿到高度问题都不大
heighe不要设置成100%,基本的H5按照这样写,iOS 或者安卓拿到高度问题都不大
上面的问题也是我工作中遇到的,希望能帮到人。
如有错误,请帮忙改正,谢谢.

WKWebView高度自适应可以使用以下三种方式: 1. 使用JavaScript获取内容高度,然后将WebView高度设置为内容高度。 ```swift // 通过JavaScript获取内容高度 webView.evaluateJavaScript("document.body.scrollHeight") { [weak self] (result, error) in guard let height = result as? CGFloat else { return } // 将WebView高度设置为内容高度 self?.webViewHeightConstraint.constant = height } ``` 2. 使用WKWebView的`scrollViewDidScroll`方法获取内容高度,然后将WebView高度设置为内容高度。 ```swift func scrollViewDidScroll(_ scrollView: UIScrollView) { // 获取内容高度 let height = scrollView.contentSize.height // 将WebView高度设置为内容高度 webViewHeightConstraint.constant = height } ``` 3. 监听WKWebView的`estimatedProgress`属性,当其值为1时,获取内容高度,然后将WebView高度设置为内容高度。 ```swift private var isWebViewLoaded = false func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { isWebViewLoaded = true } func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if keyPath == "estimatedProgress" { if let progress = change?[.newKey] as? Float, progress == 1.0 && isWebViewLoaded { // 获取内容高度 webView.evaluateJavaScript("document.body.scrollHeight") { [weak self] (result, error) in guard let height = result as? CGFloat else { return } // 将WebView高度设置为内容高度 self?.webViewHeightConstraint.constant = height } } } } ``` 需要注意的是,第三种方式需要在初始化时添加观察者,如下所示: ```swift webView.addObserver(self, forKeyPath: "estimatedProgress", options: [.new, .old], context: nil) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值