TableView嵌套WKWebview出现的奇怪坑人bug
前要 我在使用UITableView嵌套WKWebView的行程那种网页带列表的新闻浏览的形式,我使用的就是UITaleView的tableHeaderView
使用WKwebview
来代替,本身WKwebview
就是继承UIview,这个就涉及到计算WKwebView的内容的高度了,我起初在- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
这个方法中计算WKWebView的内容的高度(使用js与oc交互调用,不会自行百度),发现这里计算的高度根本不对,只能尝试延迟获取WKWebView的高度,但是发现延迟获取,wekView的高度太大话还是获取的不对,幸亏还有KVO
这种东西,可以监听webView.scrollView
的contentSize
的变化,这样就可以很容易的获取高度,最后发现contentSize的的监听方法执行了多次,说明wkWebView的内容变化多次,但是在
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
这个方法中不管几次,最后执行刷新这个布局就可以了呀。
问题以及问题解决
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{if ([keyPath isEqualToString:@"contentSize"]) {CGSize new_size = [[change objectForKey:@"new"] CGSizeValue];
_web_view.height = new_size.height;
_tableviewHeadview.height = new_size.height;
_detaiTableView.tableHeaderView.height = new_size.height;
[_detaiTableView reloadData];
}
}
【TableView嵌套WKWebview出现的奇怪坑人bug】这个方法可以监听
WKWebView.ScrollView
的变化,在iOS10以下会有问题,整个界面会被WKwebView覆盖,并且还不能滑动,但是在iOS10(包括iOS10)以上就可以这样,正常刷新整个TableView界面,这个问题还是我同事的iOS9.8的系统手机发现,目前解决的方法就是把这里的_detaiTableView.tableHeaderView.height = new_size.height;
换成_detaiTableView.tableHeaderView = _tableviewHeadview
重新赋值一下头部HeadView一次,不去改变高度,这个问题很坑爹,就是在此记录一下。推荐阅读
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- tableView|tableView 头视图下拉放大 重写
- Improve|Improve Nested Conditionals(优化嵌套的条件语句) 面对大量的if-else语句
- OC:|OC: WKWebView详解
- WKWebview|WKWebview js 调用oc 和oc调用js
- #12-UITableView|#12-UITableView 优化方案
- iOS自适应高度的TableViewCell
- UITableView和UICollectionView的Cell重用问题
- 集合框架(集合嵌套存储和遍历元素的案例代码实现)
- markdown中使用iframe|markdown中使用iframe 嵌套网页