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一次,不去改變高度,這個問題很坑爹,就是在此記錄一下。

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