UITableViewCell嵌套WKWebView

今天看到有人问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的高度
}];
}];
}

看下效果如何
展开前


展开前.jpg

展开后


UITableViewCell嵌套WKWebView_第1张图片
展开后.jpg

完美解决tableViewcell上嵌套WKWebView并能自由点击展开收回按钮_

你可能感兴趣的:(UITableViewCell嵌套WKWebView)