美文网首页
UITableViewCell嵌套WKWebView

UITableViewCell嵌套WKWebView

作者: 断忆残缘 | 来源:发表于2017-03-14 13:09 被阅读2216次

    前言

    今天一直在网上找如何在UITableViewCell嵌套WKWebView,问题还挺多了,最后还是在stackoverflow找到了解决方案,废话不多说,直接看解决方案。

    正文

    1. 构建WKWebView

            self.webView = [[WKWebView alloc] init];
            // 创建请求
            NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.jianshu.com"]];
            // 加载网页
            [self.webView loadRequest:request];
            
            self.webView.scrollView.scrollEnabled = NO;
            self.webView.scrollView.bounces = NO;
            self.webView.scrollView.showsVerticalScrollIndicator = NO;
            self.webView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
            
            // 将webView添加到界面
            [self.contentView addSubview:self.webView];
    

    2. cell高度适应WKWebView的内容

    cell.webView.navigationDelegate = self;
    
    #pragma mark - WKNavigationDelegate
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
        
        [webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
            // 计算webView高度
            self.webViewCellHeight = [result doubleValue];
            // 刷新tableView
            [self.tableView reloadData];
        }];
    }
    
    

    3. 解决加载空白问题

    原因:由于WKWebView采用的lazy加载模式,所在的scrollView的滚动被禁用,导致被嵌套的WKCompositingView不进行数据加载。

    详细细节请参考:WKWebView刷新机制小探

    #pragma mark - UIScrollViewDelegate
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        // 判断webView所在的cell是否可见,如果可见就layout
        NSArray *cells = self.tableView.visibleCells;
        for (UITableViewCell *cell in cells) {
            if ([cell isKindOfClass:[TraitWebViewCell class]]) {
                TraitWebViewCell *webCell = (TraitWebViewCell *)cell;
                
                [webCell.webView setNeedsLayout];
            }
        }
        
    }
    

    相关文章

      网友评论

          本文标题:UITableViewCell嵌套WKWebView

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