如何计算WKWebView的高度?

时间:2016-06-18 07:22:55

标签: ios objective-c wkwebview

我想在我的项目中像这样计算WKWebView的高度,但它总是没用,我怎么能得到它?

-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation     *)navigation{
    [webView sizeToFit];
    _height = webView.frame.size.height ;
}

3 个答案:

答案 0 :(得分:1)

您可以使用键值观察

 - (void)viewDidLoad {
...
[self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
}


- (void)dealloc
{
[self.webView.scrollView removeObserver:self forKeyPath:@"contentSize" context:nil];
}


- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context
{
if (object == self.webView.scrollView && [keyPath isEqual:@"contentSize"]) {
    // we are here because the contentSize of the WebView's scrollview changed.

    UIScrollView *scrollView = self.webView.scrollView;
    NSLog(@"New contentSize: %f x %f", scrollView.contentSize.width, scrollView.contentSize.height);
}
}

这将节省JavaScript的使用,让您在所有更改中保持循环。

答案 1 :(得分:1)

我已经尝试了滚动视图KVO,我尝试使用clientHeightoffsetHeight之类的内容评估文档上的javascript ...

最终对我有用的是:document.body.scrollHeight。或者使用最顶层元素的scrollHeight,例如容器div

我使用KVO听取loading WKWebview属性更改,当它完成加载时,我确定高度如下:

[self.webview evaluateJavaScript: @"document.body.scrollHeight"
                       completionHandler: ^(id response, NSError *error) {
            NSLog(@"Document height: %@", response);
}];

答案 2 :(得分:0)

UIView的边界是矩形,表示为相对于其自身坐标系(0,0)的位置(x,y)和大小(宽度,高度)。 UIView的框架是矩形,表示为相对于它所包含的超视图的位置(x,y)和大小(宽度,高度)。

因此,我认为你只需要定位bounds.height而不是它的框架。