有沒有什麼技術可以讓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