作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否有任何技术可以使 UIWebView 重绘自身?我在 UIWebView 及其 UIScrollView 上尝试了 setNeedsDisplay
和 setNeedsLayout
,但都没有用。
最佳答案
一问就找到了答案。关键是告诉 UIWebView
的 scrollView
的 subview 重绘自己 - 特别是 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
的类名不变。没有它,它会点击 ScrollView 中的所有 UIView,这在这一点上并不是真正的问题(不会产生重大开销)但总是可以改变。
编辑:
在某些情况下,以下 JavaScript 片段可以完成相同/相似的事情:
window.scrollBy(1, 1); window.scrollBy(-1, -1);
您可能认为 UIScrollView
的 contentOffset
也会这样做,但根据我的经验,情况并非总是如此 - 出于某种原因 window.scrollTo
在这方面很特别。
关于ios - 强制 UIWebView 重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257629/
我是一名优秀的程序员,十分优秀!