dequan1331 / HybridPageKit

A high-performance、high-extensibility、easy integration framework for Hybrid content page. Support most content page types of News App.
MIT License
1.22k stars 184 forks source link

WKWebView 高度问题 #36

Closed Lee0820 closed 4 years ago

Lee0820 commented 4 years ago

现在还是 WKWebView 计算有问题,如果我在外部想用和前端约定好的方法获取内容高度,请问需要如何处理呢? NSString jsString = [NSString stringWithFormat:@"document.documentElement.offsetHeight %d / document.documentElement.clientWidth",(int)_defaultWebView.bounds.size.width]; 这个方法获取的高度时对时不对,原因可能是我这里css js 里的一些样式问题导致的,我们这里定义了

后台返回的html字符串
然后通过 "function getMainHeight() {" "var main = document.getElementById('main');" "return main.offsetHeight;" "}" 获取高度是没问题,请问如何自己外部设置wk 高度吗

dequan1331 commented 4 years ago

WKWebView 是异步计算的,比如在FinishNavigation中获取contentSize,就不一定是最终的大小。所以一个比较合理的办法就是监听WKWebView的contentSize,判断contentSize是否更新,并且使用新的value。其中如果contentSize的height大于frame.size.height,其实页面的高度就是contentSize.height. 直接使用即可;如果等于甚至小于frame.size.height,就需要用JS辅助判断一下了。总的来说,还是要注意时序问题,因为FinishNavigation不代表页面渲染完成。不知道是不是这个问题,可以试试

Lee0820 commented 4 years ago

我之前是监听WKWebView的contentSize的,但是出现了一些问题,所以后来改用了js方法获取高度,现在用这个框架, CGFloat jsHeight = ((NSNumber *)result).floatValue; 这个返回的高度,只有第一次是看上去是对的,之后一直是ContainerScrollVie的高度,就是下面有大片的空白,但是偶尔是对的,但是几率很小,不知道是什么原因