UITableViewCell嵌套WKWebView

前言

今天一直在网上找如何在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];
        }
    }
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 16,236评论 4 61
  • 背景 iOS的一个坑。在线上的版本中,iOS10系统中,app内使用WKWebView当作一个普通的子View来展...
    石坚_Te阅读 1,910评论 0 5
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,895评论 8 183
  • 正如每一个孩子的内心都住着一个圣诞老人,在成年人的心中也存活着无数的超级英雄。我们渴望被超能力无条件地拯救,就好像...
    桥安同学阅读 3,537评论 3 10
  • 今天我察觉我处在哪个阶段,问自己三个问题,我是谁,我要到哪里去,我所处在什么阶段。 第一个阶段穿华丽的外衣来掩盖内...
    银尔环阅读 3,137评论 0 0

友情链接更多精彩内容