2017-09-01 1 views
7

私はUIWebViewを使ってHTML形式のコンテンツを表示しているObjective Cを使ってアプリケーションを作成しています。私は、UIWebViewデリゲートメソッド内のコードの下に使用していますwebViewDidFinishLoad'document.body.scrollHeight;'を使用してUIWebViewコンテンツの動的高さを計算します。 iOS 10で大きな値を返します

NSUInteger contentHeight = [[aWebView stringByEvaluatingJavaScriptFromString:[NSStringのstringWithFormat:@ "document.body.scrollHeight;"]] intValue];

WebViewのコンテンツの高さを計算するために、これは、iOS8に細かい作業iOS9iOS11が、iOS10にiPhoneは、実際のコンテンツ値よりもはるかに大きな値を返すコンテンツの高さを携帯電話れます。このため、私は画面内の私のwebviewの下部に余分な空白を取得しています。

私はすべてのソリューションを試しましたが、iOS 10でのみ同じ間違ったコンテンツの高さを得ました。この問題を解決するのを手伝ってください。前もって感謝します!

答えて

0

悲しいことに、私は問題を追跡することもできません。しかし、私は犯人を知っていると思う:html <tables>と自動サイズ変更。リンゴのSafariの変更ログには、ビューポートとレンダリングの変更についての議論がかなりありますが、それほど具体的なものはありません。

バージョン間でHTMLをWebビュー(Safariで動かす)で表示するように見えます。私は<table><body>のために多くの韻や理由と明示的なCSSを蒸留することはできませんが、何も得られませんでした。

うまくいけば、この部分的な答えは、いくつかの進歩または少なくとも回避するのに役立ちます。

0

私はWebViewのサイズを正しく調整するのにかなり苦労しました。

document.body.scrollHeightを評価する前にもう一度手順を追加してください。このような

何か:

-(void) webViewDidFinishLoad:(UIWebView *)webView { 
    if[[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]){ 
webViewHeight = [[WebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]; 
//resize logic 
} 

私は迅速にかつWKWebViewのための私のコードを書いているが、それは基本的には同じことです。 ポイントはscrollHeight(またはoffsetHeight - この場合の差異を把握できませんでした)を捕まえることです。その瞬間はdocument.readyStateの後にあるようです。

希望すると、これが役立ちます。

+0

ご回答ありがとうございます。私は上記のコードをテストしていますが、動作していません。 –

0

私はcontentSizeを取得するために次の方法で使用しました。

webviewのスクロールビューでオブザーバー(KVO)を追加しました。今

self.webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil); 

、WebViewののcontentsizeが変更されますいつでも、私はこの方法

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
} 

にコールバックを取得する今、このメソッドからオブジェクトのcontentSizeを取り、それを使用しています。

関連する問題