UIScrollView内のUIWebViewでズームインを有効にするにはどうすればよいですか?


132

私はUIWebView内部がUIScrollView(scrollview別の成分を含む)を

Interface BuilderProgrammaticの両方でマルチタッチを有効にしようとしましたUIWebViewが、それでもHTMLにズームできません。両方でズームインを処理する必要がUIScrollViewありUIWebViewますか?または、設定する必要のないものはありますか?


2
scalesPageToFit = YES動作しますが、デフォルトのコンテンツサイズが変更されます。私の答えを見てください。これは役に立ちます。
iPatel 2014

回答:


348

ピンチおよびズームをUIWebViewで機能させるには、scalesPageToFit = YESを設定する必要があります。


2
これは良いことですが、ビューが収まるようにページが縮小されています。表示するコードでHTMLページを作成していますが、以前のサイズのままにしたいのですが、ユーザーがピンチズームでズームインできるようにしています
Dan F

33
次のメタタグをHTMLドキュメントのヘッドに追加します:<meta name = 'viewport' content = 'initial-scale = 1.0、maximum-scale = 10.0' />
vocaro

2
外部Webサイトで同じことをするにはどうすればよいですか?つまり、初期ズームを設定し、その後ユーザーズームが有効になります。
ウィリアムジョクシュ

こんにちは、ページング、ズームイン/ズームアウトなど、すべて正常に動作しています...しかし、それには1つの問題があります。私のアプリは両方の向き(縦向きと横向き)で動作しています。これで、縦向きで、ページを2〜3回スワイプする必要があるので、次のページに進むことができます。しかし、ランドスケープでは、それはうまく機能しています。私はscrollview内にwebviewを取り、scrollviewにはページングがあります。しかし、スクロールをスワイプして次のページに移動しようとすると、次のページに移動するために2〜3回スワイプする必要があります(縦向きモード)。同じことに関するアイデア。助けてくれてありがとう。
ニシャントB

完璧な答え...ありがとう
AL̲̳I 2014年

12

さて、あなたは上記の両方を行う必要がありますが、次のことも行う必要があります。メインビューにWebビューがありましたが、機能しませんでした。

  1. 上記のように、最初にUIScrollViewをメインビューに配置し、次にWebビューをスクロールビューに配置する必要があります。
  2. 上記のように、<UIScrollViewDelegate>ビューコントローラーに実装し、スクロールビューデリゲートをInterface Builderのビューコントローラーにドラッグして、viewForZoomingInScrollViewメソッドを実装します。これは、UIScrollViewへのポインタを返す必要があります(myScrollViewを返します)。
  3. Webビューとスクロールビューの両方にIBOutletプロパティを作成しました-NIBでそれらをビューコントローラーにリンクします。
  4. スクロールビューで、[属性インスペクター]に移動し、最大および最小のズーム率を設定します(私は0.5から5.0に設定しましたが、うまく機能します)。
  5. Webビューの属性インスペクター:
  6. [Web View]セクションで、[Scale Pages to Fit]を選択します
  7. 「表示」セクションで、「モード」、「左上」を選択します
  8. 下部の[表示]セクションで、[ユーザー操作が有効]および[マルチタッチが有効]をオンにします

3

JavaScriptを使用すると、ズームレベルを制御できますが、私が見つけたolyソリューションは滑らかに見えません。

あなたが持っていると言います<head>

<meta id="vp" name="viewport" content="width=768,initial-scale=1.0">

4倍にズームし、ユーザーがズームを変更できるようにするには、コンテンツを2回変更します。

var vp = document.getElementById('vp');
vp.content = "width=767,minimum-scale=4.0,maximum-scale=4.0,user-scalable=yes";
vp.content = "width=768,minimum-scale=0.25,maximum-scale=10.0,user-scalable=yes";

幅を切り替えることは非常に重要です。それ以外の場合、Mobile Safariには重大な再描画のバグがあります(最適化が過剰なため)。

initial-scaleもう一度設定することはできません-2回目は無視されます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.