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

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

作者: 伯wen | 来源:发表于2018-08-15 13:56 被阅读99次
    • 在项目中遇到一个需求: 将加载完的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<NSKeyValueChangeKey,id> *)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加载网页后, 网页内容的高度

          本文链接:https://www.haomeiwen.com/subject/bhaibftx.html