是否有任何技术可以让UIWebView重绘自己?我在UIWebView及其UIScrollView上尝试了setNeedsDisplay
和setNeedsLayout
,但都没有用过。
答案 0 :(得分:9)
在询问后立即找到答案。关键是告诉UIWebView
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
的类名而不改变。没有它,它会击中滚动视图中的所有UIViews,这在这一点上并不是真正的问题(不会产生重大的开销),但总是可以改变。
修改强>
在某些情况下,以下JavaScript代码片段将完成相同/类似的事情:
window.scrollBy(1, 1); window.scrollBy(-1, -1);
您认为UIScrollView
的{{1}}也会这样做,但根据我的经验并非总是如此 - 由于某种原因contentOffset
在这方面很特别。
答案 1 :(得分:0)
这拯救了我的生命:
self.wkWebView.evaluateJavaScript("window.scrollBy(1, 1);window.scrollBy(-1, -1);", completionHandler: nil)
在webview上添加此行,加载委托事件或wkwebview确实完成导航
谢谢MAN !!!!