有没有什么技术可以让UIWebView重绘自己?我试过UIWebView和它的UIScrollView上的setNeedsDisplay
和setNeedsLayout
,但都没有工作。强制UIWebView重绘?
回答
在询问后立即找到答案。关键是要告诉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语句是安全的,避免依赖。没有它,它会触发scrollview中的所有UIViews,在这一点上这不是一个真正的问题(没有显着的开销),但总是可以改变。
编辑:
在某些情况下,JavaScript代码下面的代码片断将完成相同/相似的事情:
window.scrollBy(1, 1); window.scrollBy(-1, -1);
你会觉得UIScrollView
的contentOffset
会就此别过,但根据我的经验,情况并非总是如此 - 由于某些原因,window.scrollTo
在这方面很特别。
你好,你的回答帮了我。但是,请记住,您已注释掉if语句的方式,for循环仅刷新数组中的第一个视图,因为break语句仍未被注释掉。我认为它仍然有效,因为Web浏览器视图通常是第一个视图,但是您可能想编辑一下你的解决方案,因为for循环在这种情况下什么也不做=) –
@jake_hetfield谢谢 - 我错过了!我在关于不检查课程的事情上增加了可扩展性/有效性的事后考虑,并且错过了留下的“突破”。 '珍惜它!很高兴的答案帮助了你 - 帮我解决了这个问题的时候:)也让我想起了一些我回忆过的关于这个问题的东西。 – mattsven
这拯救了我的生命: self.wkWebView.evaluateJavaScript(“window.scrollBy(1,1); window.scrollBy(-1,-1);”,completionHandler:nil) –
这救我的命:
self.wkWebView.evaluateJavaScript("window.scrollBy(1, 1);window.scrollBy(-1, -1);", completionHandler: nil)
添加此行的WebView做负载委托事件或wkwebview没有完成导航
感谢的人!!!!
- 1. 强制重新加载uiwebview
- 2. 强制重绘层
- 3. 强制JScrollPane和JPanel重绘
- 4. 强制重绘WPF控件
- 5. 如何强制TableRow重绘
- 6. WPF强制重绘画布
- 7. 强制重绘视图
- 8. 强制屏幕重绘
- 9. 如何强制重绘层
- 10. Android:强制MapView重绘
- 11. 强制形式重绘?
- 12. UIWebView旋转重绘
- 13. 旋转UIWebView:强制横向
- 14. 如何在JS中强制重绘?
- 15. 如何在PySide中强制重绘?
- 16. 插入样式后jQuery强制重绘
- 17. 强制布局刷新/重绘android?
- 18. 强制DOM按照需求重绘javascript
- 19. 强制Richtextbox重绘其前景
- 20. 如何强制重绘android UI?
- 21. SL 4 - 强制重绘视觉树
- 22. WPF。如何强制listitem重绘自己?
- 23. 在JavaFx中强制重绘节点
- 24. Flash Bug - 强制屏幕重绘
- 25. 强制浏览器重绘图像
- 26. img元素的强制重绘
- 27. 强制IE8重绘/后利润率左
- 28. 如何强制重绘Google Maps API v3.0?
- 29. 强制重绘按钮,点击后
- 30. 强制Flutter重绘所有小部件
可以重新加载吗? – Raptor
@ShivanRaptor它可以,但它会要求整个页面重新加载,与简单重绘/重播已存在的内容相比,这会花费很长时间。尽管我找到了解决方案。 – mattsven
HTML内容中的'javascript'怎么样?或'HTML'标题中的'meta'标签? – holex