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.scrollViewcontentSize的变化,这样就可以很容易的获取高度,最后发现contentSize的的监听方法执行了多次,说明wkWebView的内容变化多次,但是在

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context;

这个方法中不管几次,最后执行刷新这个布局就可以了呀。


问题以及问题解决

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)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一次,不去改变高度,这个问题很坑爹,就是在此记录一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章