iOS开发: 获取WKWebView加载网页后, 网页内容的高度

  • 在项目中遇到一个需求: 将加载完的html网页做为UITableViewtableHeaderView
效果

使用WKWebView代理遇到的问题

  • 我这里使用WKWebView加载网页, 然后将加载后的WKWebView, 做为UITableViewtableHeaderView
  • 如果在WKWebView的代理中, 获取加载结果, 那么当- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;方法调用时, 获取到的高度将是0

解决思路

  • 我使用了KVO, 监听WKWebView中, scrollViewcontentSize属性:
[self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:nil];
  • 只要contentSize改变, 就重新设置WKWebView实例的高度, 并设置为UITableViewtableHeaderView
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    self.webView.height = self.webView.scrollView.contentSize.height;
    self.tableView.tableHeaderView = self.webView;
}
  • 同时使用scrollViewdelegate禁止网页内容缩放
self.webView.scrollView.delegate = self;
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return nil;
}
  • 最后记得移除KVO
- (void)dealloc
{
    [self.webView.scrollView removeObserver:self forKeyPath:@"contentSize"];
}

你可能感兴趣的:(iOS开发: 获取WKWebView加载网页后, 网页内容的高度)