我在使用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:(NSDictionaryid> *)change context:(void *)context;
这个方法中不管几次,最后执行刷新这个布局就可以了呀。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionaryid> *)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];
}
}
这个方法可以监听WKWebView.ScrollView
的变化,在iOS10以下会有问题,整个界面会被WKwebView覆盖,并且还不能滑动,但是在iOS10(包括iOS10)以上就可以这样,正常刷新整个TableView界面,这个问题还是我同事的iOS9.8的系统手机发现,目前解决的方法就是把这里的_detaiTableView.tableHeaderView.height = new_size.height;
换成_detaiTableView.tableHeaderView = _tableviewHeadview
重新赋值一下头部HeadView一次,不去改变高度,这个问题很坑爹,就是在此记录一下。