- 在项目中遇到一个需求: 将加载完的
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;
}
- (void)dealloc
{
[self.webView.scrollView removeObserver:self forKeyPath:@"contentSize"];
}
网友评论