- 在项目中遇到一个需求: 将加载完的
html网页做为UITableView的tableHeaderView

效果
使用WKWebView代理遇到的问题
- 我这里使用
WKWebView加载网页, 然后将加载后的WKWebView, 做为UITableView的tableHeaderView - 如果在
WKWebView的代理中, 获取加载结果, 那么当- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;方法调用时, 获取到的高度将是0
解决思路
- 我使用了KVO, 监听
WKWebView中,scrollView的contentSize属性:
[self.webView.scrollView addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:nil];
- 只要
contentSize改变, 就重新设置WKWebView实例的高度, 并设置为UITableView的tableHeaderView
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
self.webView.height = self.webView.scrollView.contentSize.height;
self.tableView.tableHeaderView = self.webView;
}
- 同时使用
scrollView的delegate禁止网页内容缩放
self.webView.scrollView.delegate = self;
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return nil;
}
- 最后记得移除KVO
- (void)dealloc
{
[self.webView.scrollView removeObserver:self forKeyPath:@"contentSize"];
}