强制UIWebView重绘?
有没有什么技术可以让UIWebView重绘? 我已经尝试了UIWebView和它的UIScrollView setNeedsDisplay
和setNeedsLayout
,但都没有工作。
在询问后立即find答案。 关键是要告诉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) //} } }
我已经UIWebBrowserView
if语句是安全的,避免依赖于UIWebBrowserView
的类名不变。 没有它,它会触及所有在scrollview中的UIViews,在这一点上这不是一个真正的问题(没有显着的开销),但总是可以改变。
编辑:
在某些情况下,下面的JavaScript代码将完成相同/相似的事情:
window.scrollBy(1, 1); window.scrollBy(-1, -1);
你会认为UIScrollView
的contentOffset
也会这样做,但在我的经验中并不总是这样 – 由于某种原因, window.scrollTo
在这方面是特殊的。
要点: https : //gist.github.com/matt-curtis/5843862
这救了我的命:
self.wkWebView.evaluateJavaScript("window.scrollBy(1, 1);window.scrollBy(-1, -1);", completionHandler: nil)
在webview上添加这一行确实加载委托事件或wkwebview没有完成导航
谢啦!!!!