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. 解决加载空白问题
【UITableViewCell嵌套WKWebView】原因:由于
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];
}
}}
推荐阅读
- 【React Native】ScrollView横向滚动的嵌套
- android|android studio 布局嵌套,Android Studio实战 - 设计布局之嵌套布局
- mysql5.6|mysql5.6 解析JSON字符串方式(支持复杂的嵌套格式)
- Flutter项目开发|Flutter小技巧总结之SingleChildScrollView里面嵌套Column和ListView时候,ListView不显示
- Flutter|Flutter 嵌套两个ListView时滚动失效
- Flutter开发 ListView嵌套ListView 无发现显示问题
- Flutter|Flutter Column等容器嵌套ListView报错,由于高度没办法确定
- flutter|flutter listview 嵌套 listview Column GridView
- Android开发|Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套
- xib中嵌套使用xib