WebView 是自定义的类,在类中用kvo监听的高度
时间: 2024-02-06 21:11:46 浏览: 20
WebView 是iOS中自带的类,不是自定义的类。在监听 WebView 高度方面,可以通过以下两种方式实现:
1. 通过 KVO 监听 WebView 的 contentSize 属性的变化,从而获取 WebView 的高度。
```objc
// 添加 KVO 监听
[webView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
// 监听回调
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if ([keyPath isEqualToString:@"contentSize"]) {
CGFloat height = webView.scrollView.contentSize.height;
// 处理 WebView 高度变化
}
}
// 移除 KVO 监听
[webView.scrollView removeObserver:self forKeyPath:@"contentSize"];
```
2. 使用 JavaScript 获取 WebView 的高度,通过 JavaScriptCore 框架将 JavaScript 代码注入 WebView 中,从而获取 WebView 的高度。
```objc
// 注入 JavaScript 代码获取 WebView 高度
NSString *jsGetHeight = @"document.documentElement.scrollHeight";
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSNumber *height = [context evaluateScript:jsGetHeight].toNumber;
CGFloat webHeight = [height floatValue];
// 处理 WebView 高度变化
```
需要注意的是,第二种方式需要等到 WebView 加载完成后才能获取到正确的高度,否则可能会获取到不准确的高度。