2016-10-06 16 views
0

私はUIWebViewにサイズ> 5MBのpdfファイルを読み込みます。私はロード後にPDFファイルを一定のレベルに拡大したいと思っています。ファイルを読み込む前にwebViewDidFinishLoadが呼び出されました - iOS 8

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

上記のスニペットは、iOS 9以降で期待される結果を示しています。しかし、iOS 8では、webViewDidFinishLoadが起動すると、pdfがロードされておらず効果がありません。 enter image description here

また、私はそれが毎回正常に動作しますが、ない

 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)) 
     } 

を試してみました。時間を増やすことは良い考えではありません。なぜなら、ときどきwebViewがファイルをロードするのに5秒以上かかるからです。

私は

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?

をグーグルに乗っしかし、何も私の問題を解決していない多くのソリューションを試してみました。

スクリーンショットに表示されているアクティビティインジケータは私によって追加されていません。 PDFを完全に読み込んだ後、インジケータが消えます。とにかく、インジケーターが消えたときにイベントを特定できれば、ファイルを拡大縮小できます。

これを識別する方法はありますか?または、ファイルロードの完了を識別する他の方法はありますか?

答えて

0

私はWKWebViewでも同様の問題がありました。私の解決策は、webView.scrollViewにcontentSizeのオブザーバを追加することでした。これがあなたの問題に役立つかどうかは確かではありませんが、うまくいけば正しい方向に向けるでしょう。

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

私はオブザーバを追加する際に直面する問題は、ユーザはまた、リスナーがページのちらつきで終わることにより、そこにピンチズームと呼ばれない場合には、あなたが結果を得る

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

何かをします。 'contentSize'が' observeValue() 'のユーザによって引き起こされたことを識別する方法はありますか? – iOS

関連する問題