2016-10-06 2 views
0

Ich lade eine PDF-Datei der Größe> 5MB in meinem UIWebView. Ich möchte die PDF-Datei nach dem Laden auf ein bestimmtes Level skalieren.webViewDidFinishLoad aufgerufen vor dem Laden der Datei - iOS 8

func webViewDidFinishLoad(webView: UIWebView) { 
     webView.scrollView.setZoomScale(3.0, animated: false) 
     webView.scrollView.contentOffset = CGPointMake(0, -(self.webView.scrollView.contentInset.top)) 
    } 

Das obige Snippet gibt das erwartete Ergebnis für iOS 9+. Aber auf iOS 8, wenn webViewDidFinishLoad ausgelöst wird, wird die PDF nicht geladen und es gibt keine Auswirkungen. enter image description here

Ich habe auch versucht

 let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) 
     dispatch_after(delayTime, dispatch_get_main_queue()) { 
      webView.scrollView.setZoomScale(3.0, animated: false) 
      webView.scrollView.contentOffset = CGPointMake(0, -(self.webView.scrollView.contentInset.top)) 
     } 

Es funktioniert gut, aber nicht jedes Mal. Das Erhöhen der Zeit ist keine gute Idee, denn manchmal dauert es webView mehr als 5 Sekunden, um die Datei zu laden.

Ich habe versucht, viele Lösungen, die ich

UIWebView: when did a page really finish loading?

How to detect when a UIWebView has completely finished loading?

UIWebView - How to identify the "last" webViewDidFinishLoad message?

auf googeln bekam aber nichts mein Problem gelöst.

Der Aktivitätsindikator, den wir im Screenshot sehen, wird nicht von mir hinzugefügt. Die Anzeige verschwindet nach dem vollständigen Laden der PDF-Datei. Jedenfalls, wenn wir das Ereignis identifizieren könnten, wenn der Indikator verschwindet, kann ich die Datei skalieren.

Gibt es eine Möglichkeit, es zu identifizieren? Oder eine andere Möglichkeit, den Abschluss des Ladens von Dateien zu identifizieren?

Antwort

0

Ich hatte ein ähnliches Problem in WKWebView. Meine Lösung bestand darin, dem webView.scrollView einen Beobachter für contentSize hinzuzufügen. Nicht sicher, ob dies für Ihr Problem hilfreich ist, aber hoffentlich wird es Sie in die richtige Richtung weisen.

webView.scrollView.addObserver(self, forKeyPath: #keyPath(UIScrollView.contentSize), options: .new, context: nil) 

etwas tun, wenn Sie das Ergebnis

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if keyPath == #keyPath(UIScrollView.contentSize) { 
     //do something 
    } 
} 
+0

Das Problem, das ich in dem Hinzufügen Beobachter Gesicht bekommen ist, wenn der Benutzer auch Pinch Zoom Fall ist, wird der Hörer dort genannt, indem sie mit Seite Flimmern zu enden. Gibt es eine Möglichkeit zu erkennen, dass 'contentSize' vom Benutzer in' observeValue() 'verursacht wird? – iOS

Verwandte Themen