2013-06-28 9 views
10

ナビゲーションバーとステータスバーの後ろをスライドするWebビューを使用するView Controllerを作成しています。これを行うには、webView.scrollView.contentInsetプロパティの上部のインセットを64に設定しています。UIWebView contentInset下部に余分な高さがない

しかし、これはウェブビューが占有したい領域のサイズを縮小しないので、ページが画面いっぱいに満たない場合は、スクロールするために下部に64ピクセルの空白があります。 Webビューは垂直のUIPageViewControllerであるため、ページングが中断されます。この余分なスペースを取り除く方法はありますか?

+0

ナビゲーションバーとステータスバーの後ろにウェブビューコンテンツを表示しますか?またはナビゲーションバーがステータスバーの後ろのWebビューでスクロールしますか? – Maximilian

+0

ウェブビューをスクロールすると、半透明のナビゲーションバーとステータスバーの後ろをスライドします。 (私は実際にiOS 7でこれをやっているので、ぼんやりとした新しい曖昧なナビゲーションバーの1つですが、UIWebViewスクロールの方法は変更されていません)。私はこのアプリで探しているものではありません。 –

+0

oh。私はあなたが望むものを知っていると思う、それはcontentInsetではない。なぜならそれはWebビューのコンテンツを動かすからだ。ナビゲーションバーの後ろにWebビューを表示したい場合は、clipsToBoundsをNOに設定してください – Maximilian

答えて

0

ショートページのスクロールを無効にすることで、この問題を回避することができました。基本的には、-stringByEvaluatingJavaScriptFromString:を使用して、document.bodyから下に歩み、一番下の要素の下端の位置を計算するページ内でJavaScriptを実行します。 (document.body自体は常にビューポートと同じ大きさなので、私はそのサイズを見ることはできません)。Objective-C-landに戻って、Webビューの高さと比較しますそれが少ない場合は、スクロールを無効にします。これは完璧な解決策ではありませんが、最悪の症状をカバーします。

誰かがこれよりも優れた解決策を考え出すことができたら、それについて聞いてみたいと思います!いずれにせよ、私は自分自身に賞金を授与することはできないので、誰かがそれを手に入れようとしています。

+0

Chris Trumanによって提供されたようなより良い選択肢があることを考慮して、これは正解としてマークされるべきではないと私は誠実に考えています。一番下の要素の位置を確認するためにJavaScriptがうまくいきません。 – Uzaak

3

webView.scrollView.contentSizeを調整して高さを64に調整する必要があるように聞こえます。これに答えるために、ナビゲーションバーとステータスバーの後ろにスライドさせる方法に関する詳細情報を提供する必要があります。私は、スクロールビューのプログラミングガイドのこのセクションを見てみます:

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/UIScrollView_pg/CreatingBasicScrollViews/CreatingBasicScrollViews.html

+0

私が何をしているのか少し詳細については、私のコメントを参照してください。私は 'contentSize'は、ページがフルスクリーンよりも小さい場合にのみ変更すべきだと思います。どうすればそれを決めることができますか? –

+0

WebViewが読み込まれると、contentSizeはおそらくコンテンツの高さを示します。 contentInset.bottom = 64を設定する必要があるように聞こえます。 –

1

変更clipsToBounds。

webView.clipsToBounds = NO; 

これにより、コンテンツがフレームの外側に表示されるため、ナビゲーションバーのすぐ下に、通常のようにフレームを設定します。ナビゲーションバーは半透明になり、その下にコンテンツが表示されます。

+0

残念ながら、UIPageViewControllerに入っているので、この場合は動作しません。1つのコントローラのWebビューは、そのエッジをオーバーフローし、その上下のコントローラが重なってしまい、明らかにページコントローラのジェスチャ認識機能を妨害します。 –

+0

それはあなたが今それを見ることができるそれらの場所で触れることを許さない、ちょうどそれを示す。と私は知らないので、私はそれが動作すると思ったページコントローラを試みたことはありません。 – Maximilian

+0

もう1つの方法は、フルスクリーンレイアウトを望むようにView Controllerを設定することです...そこから移動します。 'UIViewController'は、それが管理しているビューの1つ以上に' clipsToBounds = YES'を設定します。 'viewController.wantsFullScreenLayout = YES'を設定することでそれが解決されるかどうかはわかりません。 – nielsbot

1

ウェブビューのAutolayoutを無効にすることを忘れないでください!

2

webviewのscrollviewコンテンツのインセットを調整したことがありますか?例:

webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0,64, 0) 
関連する問題