TableView嵌套WKWebview出现的奇怪坑人bug

在实现UITableView嵌套WKWebView展示网页新闻的场景中,遇到WKWebView内容高度计算不准确的问题。通过延迟获取和监听WKWebView的contentSize变化来解决,但在iOS10以下版本,WKWebView会覆盖整个界面导致无法滑动。解决办法是针对iOS10以下系统,不修改高度而重新赋值头部HeadView,避免界面异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前要

我在使用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一次,不去改变高度,这个问题很坑爹,就是在此记录一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值