2016-04-14 45 views
7

iOS 9.2では、デバイス幅よりも固定幅のテーブルを使用したWKWebViewレンダリングHTMLは、次のようなビューポートタグを追加することで、WKWebViewビューポートがiOS 9.3で機能しないように調整する

<meta name="viewport" content="width=device-width, shrink-to-fit=YES"> 

この行はWKWebViewが効果的にスクロールバーを必要とせずにビューフレームで全体のレンダリングされたページにフィットするようにビューポートをズームアウトさせました。バニラ単一のビューアプリでのviewDidLoadで実行した場合たとえば、次のコードを考えてみます。

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; 
WKWebView *newWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0,40,self.view.frame.size.width, self.view.frame.size.height - 40) configuration:wkWebConfig]; 
NSString *toRender = @"<head><meta name=\"viewport\" content=\"width=device-width, shrink-to-fit=YES\"></head><body><table width=700 style='background-color: blue; color:white; font-size=20px'><tr><td>this is some text that is long enough to exceed the width of the iphone 6 unless shrink-to-fit is applied</td></tr></table></body>"; 
[newWebView loadHTMLString:toRender baseURL:nil]; 
[self.view addSubview:newWebView]; 

内容は次のようにレンダリング:

enter image description here

ただし、この動作が9.3に変更されました。

enter image description here

(あなたはスクリーンショットでそれを見ることはできませんが、水平スクロールバーがある)

stackoverflowの上の他の質問を検索し、他の場所で、それ:9.3で実行して、同一のコードは次のようにレンダリング他のほとんどの人が9.3の行動を好むように思える。しかし、私は9.2の動作が必要です。だから、私の質問です:誰も9.3で同じシュリンク・フィット・ビヘイビアを得る方法を知っていますか?この変更が意図的なものなのか、それとも後続のリリースで修正されるバグなのか誰にでも分かりますか?

私のテストコードが https://github.com/nsolter/NSWebViewShrinkTestで発見することができ

、特にhttps://github.com/nsolter/NSWebViewShrinkTest/blob/master/NSWebViewShrinkTest/ViewController.m

答えて

6

私はAppleとバグレポートを提出し、これが応答である:

「いいえ、私たちはシュリンクに維持する必要はありません回避策は、コンテンツの幅を正確に記述するビューポートメタタグを使用することです。

私はこれを試しました。ビューポートタグでレンダリング後のhtmlの実際の幅の幅を指定すると、デバイスの幅で正しく表示されます。上記の例では、表の幅が700の場合、次のように指定します。<meta name=\"viewport\" content=\"width=700, shrink-to-fit=YES\">

この場合、ページには水平スクロールバーが表示されません。

ただし、初期スケールのビューポートプロパティは指定できません。その後、適切な幅で表示されません。

これはレンダリングされるまで、レンダリングされるhtmlの幅が一般的にわからないため、明らかに理想的ではありません。私の現在の解決策はwidth = device-widthで一度レンダリングし、次にwidth = Xでレンダリングすることです。ここでXは最初にレンダリングされたページの実際の幅です。

+0

私はwidth = device-widthも使用しており、同じ問題に直面しています。あなたはwidth = Xでページをリロードしていますか? – anoop4real

+0

本質的に、はい。私は実際に表示されていない新しいWKWebViewでそれをレンダリングしています。そして、新しいWebviewで交換します。 –

+1

サンプルがありますか? – anoop4real

関連する問題