Gibt es Techniken, um ein UIWebView neu zu zeichnen? Ich habe setNeedsDisplay
und setNeedsLayout
auf dem UIWebView und seinem UIScrollView versucht, aber keiner hat gearbeitet.Force UIWebView um neu zu zeichnen?
Antwort
Wörtlich die Antwort direkt nach der Frage gefunden. Der Schlüssel war, den Unteransichten von UIWebView
's scrollView
zu zeigen, um sich neu zu zeichnen - besonders die 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)
//}
}
}
Ich habe das kommentiert, wenn Aussage, sicher zu sein und vermeidet die Abhängigkeit von UIWebBrowserView
‚s Klassennamen nicht ändern. Ohne es trifft es alle UIViews, die sich in der Scrollview befinden, was zu diesem Zeitpunkt kein wirkliches Problem ist (kein signifikanter Overhead), sondern könnte sich immer ändern.
EDIT:
In einigen Fällen kann das folgende JavaScript-Schnipsel die gleiche/ähnliche Sache erreichen:
window.scrollBy(1, 1); window.scrollBy(-1, -1);
Man könnte meinen, UIScrollView
‚s contentOffset
dies auch tun würde, aber das ist nicht immer der Fall in meiner Erfahrung - aus irgendeinem Grund ist window.scrollTo
in dieser Hinsicht speziell.
Hallo, Ihre Antwort hat mir geholfen. Beachten Sie jedoch, dass die for-Schleife die Art und Weise, wie Sie die if-Anweisung auskommentiert haben, nur die erste Ansicht im Array aktualisiert, da die break-Anweisung immer noch nicht auskommentiert ist. Ich denke, es funktioniert immer noch, weil die Webbrowser-Ansicht normalerweise die erste Ansicht ist, aber vielleicht möchten Sie Ihre Lösung etwas bearbeiten, da die for-Schleife in diesem Fall nichts tut =) –
@jake_hetfield Danke - das habe ich verpasst! Ich fügte hinzu, dass ich die Klassen nicht als Nachtrag in Skalierbarkeit/Effizienz geprüft habe und dass ich die "Pause" vergessen habe. 'Preciate es! Freut mich, dass die Antwort Ihnen geholfen hat - hat mir auch geholfen, als ich mit diesem Problem kämpfte :) Erinnert mich auch daran, etwas anderes einzubringen, an das ich mich zu diesem Thema erinnert habe. – mattsven
Das rettet mein Leben: self.wkWebView.evaluateJavaScript ("window.scrollBy (1, 1); window.scrollBy (-1, -1);", completionHandler: nil) –
Das ist mein Leben retten:
self.wkWebView.evaluateJavaScript("window.scrollBy(1, 1);window.scrollBy(-1, -1);", completionHandler: nil)
diese Zeile auf webview hinzufügen tat Last Delegat Ereignis oder wkwebview Navigation Finish
MANDank hat !!!!
- 1. Force RecyclerView, um Android neu zu zeichnen
- 2. Force-Benutzer Seite neu zu laden
- 3. Refreshing div (Ursache durchsuchen, um es neu zu zeichnen)
- 4. PyQt - Animationen ohne alles neu zu zeichnen?
- 5. Force numpy, um eine Liste zu behalten
- 6. force signalr, um Benutzer wieder zu autorisieren
- 7. Zeichnen Sie einen Schatten hinter UIWebView
- 8. Qt GraphicsScene ständig neu zeichnen
- 9. Visual Studio MEF Extension - Force-Margin Glyphen aktualisiert werden oder neu zeichnen
- 10. Force WCF, um ungenutzte Klasse zu serialisieren
- 11. Force VBA, um britische Lokalisierung zu verwenden
- 12. Force HttpClient, um einzelnes Zertifikat zu vertrauen
- 13. Neu zeichnen UITableViewCells auf Rotation
- 14. Erzwingen Sie eine Aktivität im Vollbildmodus, um bei der Fortsetzung erneut zu messen/neu zu zeichnen?
- 15. Win32 App flackert beim Versuch, neu zu zeichnen. Irgendwelche Vorschläge?
- 16. kann nicht rect von Rückruf neu zeichnen
- 17. Grundlegende swift/spritekit Spiel - Probleme neu zeichnen
- 18. In Android-Liste anzeigen Nicht neu zeichnen
- 19. Javascript-Bibliothek, um Abhängigkeitsdiagramm zu zeichnen
- 20. Record Paper.js Pfadobjekt und neu zu zeichnen später
- 21. Histogramme neu zeichnen mit Crossfilter und D3
- 22. OpenGl ES 2D Android neu zeichnen
- 23. Googlebilder auf Elterncontainer neu zeichnen Größe ändern
- 24. Neu zeichnen beim Ziehen und Ablegen
- 25. fullCalendar im laufenden Betrieb neu zeichnen
- 26. UIScrollView Inhalt nach jedem Zoom neu zeichnen
- 27. C++ Win32 Fenster Hintergrund nicht neu zeichnen
- 28. DataTables nicht neu zeichnen meine Daten
- 29. Force information_schema.tables, um nach Tabellenname sortiert zurückzugeben?
- 30. Force-Gnu macht Objekte von Compiler-Definition betroffen neu aufzubauen
kann neu laden die Arbeit tun? – Raptor
@ShivanRaptor Es kann, aber es würde erfordern die gesamte Seite neu zu laden, die * so * sehr lange im Vergleich zu einfachen Neuzeichnen/Relayouting, was bereits da ist. Ich habe die Lösung gefunden. – mattsven
Was ist mit dem 'Javascript' im HTML-Inhalt? oder das 'meta'-Tag im' HTML'-Header? – holex