今天看到有人问UITableView嵌套WKWebView的问题,恰好最近公司有这么一个需求,cell上嵌套网页并能点击网页上展开收回按钮,恰好我做了。cell上嵌套网页问题很多,特别是嵌套WKWebView,网上的解决方案也很多,但是很多都有问题,既然做完了那就分享下吧。
- (void)viewDidLoad {
webViewRace = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, YMWidth(320), 200)];
webViewRace.backgroundColor = [UIColor clearColor];
webViewRace.opaque = NO;
webViewRace.userInteractionEnabled = YES;
webViewRace.scrollView.bounces = NO;
[webViewRace sizeToFit];
webViewRace.UIDelegate = self;
webViewRace.navigationDelegate = self;
NSString *url =@“http://120.24.215.97:9998/marathon/web/matchIndex.html?id=388&lang=zh-cn”;
[webViewRace loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WebViewCell" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.backgroundColor = [UIColor colorWithHexString:@"ffffff"];
//只添加一次
if (url1 != nil) {
if (isC == NO) {
isC = YES;
[cell addSubview:webViewRace];
}
}
return cell;
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
__block CGFloat number = 0;
//我这里用的RAC监听contentSize,你们也可以改成用系统方法
[RACObserve(webViewRace.scrollView, contentSize) subscribeNext:^(id _Nullable x) {
[webViewRace evaluateJavaScript:@"document.documentElement.offsetHeight"
completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSNumber *height1 = result;
CGFloat height = [height1 floatValue];
// do with the height
webViewRace.frame = CGRectMake(0, YMHeight(20), YMWidth(320), height );
//因为WKWebView的contentSize在加载的时候是不断变化的,可能高度已经获取出来了但是还在刷新,然后又获取到相同的高度,所以当高度相同的时候我们不刷新tableview,高度不相同的时候我们刷新tableView获取最新值
if (number != height) {
[self.tableView reloadData];
}
number = height;
_webViewHeight = height;//_webViewHeight全局更新的WKWebView的高度
}];
}];
}
看下效果如何
展开前
展开后
完美解决tableViewcell上嵌套WKWebView并能自由点击展开收回按钮_