是否有任何技术可以导致 UIWebView 重绘自身?我已经尝试过UIWebViewsetNeedsDisplay
及其setNeedsLayout
UIScrollView,但都没有奏效。
问问题
5008 次
2 回答
9
一问就直接找到了答案。关键是告诉UIWebView
's的子视图scrollView
重绘自己——尤其是UIWebBrowserView
.
- (void) forceRedrawInWebView:(UIWebView*)webView {
NSArray *views = webView.scrollView.subviews;
for(int i = 0; i<views.count; i++){
UIView *view = views[i];
//if([NSStringFromClass([view class]) isEqualToString:@"UIWebBrowserView"]){
[view setNeedsDisplayInRect:webView.bounds]; // Webkit Repaint, usually fast
[view setNeedsLayout]; // Webkit Relayout (slower than repaint)
// Causes redraw & relayout of *entire* UIWebView, onscreen and off, usually intensive
[view setNeedsDisplay];
[view setNeedsLayout];
// break; // glass in case of if statement (thanks Jake)
//}
}
}
我已将 if 语句注释掉以确保安全并避免依赖UIWebBrowserView
' 的类名不会更改。没有它,它会命中滚动视图中的所有 UIView,这在这一点上并不是真正的问题(不会产生重大开销),但总是可以改变。
编辑:
在某些情况下,以下 JavaScript 片段将完成相同/相似的事情:
window.scrollBy(1, 1); window.scrollBy(-1, -1);
您可能会认为UIScrollView
'scontentOffset
也会这样做,但根据我的经验,情况并非总是如此 - 由于某种原因window.scrollTo
在这方面很特别。
于 2013-06-23T04:10:19.067 回答
0
这救了我的命:
self.wkWebView.evaluateJavaScript("window.scrollBy(1, 1);window.scrollBy(-1, -1);", completionHandler: nil)
在 webview 上添加这一行确实加载了委托事件或 wkwebview 确实完成了导航
谢啦!!!!
于 2017-01-22T07:33:16.907 回答