2011-10-09 4 views
7

私はUIWebViewの中にUIScrollViewを持っています。UIWebViewスクロールをUIScrollViewに転送する方法は? (条件付きで)

このアイデアは、ユーザーが上向きにWebページをスクロールすると、画面上の多くの読書スペースを作成にできるようにすることです - ツールバーが表示されて上向きにまでUIScrollViewのをスクロールすることにより、およびツールバーががnomore見える明らかときに実際にスクロールページ上にあるより多くのコンテンツを表示するウェブページ。

IPhone Safariブラウザはまったく同じ機能を実行します。

デフォルト動作のスクリーンショット(第1回)を参照してください - 私は推測しています。なぜなら、タッチ/スクロールがウェブビュー領域上で直接起こっているので、スクロールメッセージがウェブビューによって消費されるからです。

私がここでやりたいことは、UIScrollivewに '上向きのスクロール'をいつ転送するのか、そうでないのかをプログラムで決めることです。

これを回避する方法についてのヒントは非常に役立ちます。ありがとう!!あなたが別の下のUIScrollViewの一つに検索ボックスとのUIWebViewを追加することができます

enter image description here

答えて

0

enter image description here

。 webviewがスクロールされたときにコンテンツオフセットを取得するには、次のコードスニペットを使用できます。

UIScrollView* currentScrollView; 
for (UIView* subView in testWebView.subviews) { 
    if ([subView isKindOfClass:[UIScrollView class]]) { 
     currentScrollView = (UIScrollView*)subView; 
     currentScrollView.delegate = (id)self; 
    } 
} 

今あなたがscrollview didscrollデリゲートメソッドから取得したオフセット値にあなたのベースscrollviewのyオフセット値を変更することができます。

2

UIWebView class referenceはUIScrollViewの中のUIWebViewを埋め込む思いとどまら:

重要:あなたは UIScrollViewのオブジェクトでのUIWebViewかのUITableViewオブジェクトを埋め込むべきではありません。その場合、2つのオブジェクトのタッチイベントが混在し、誤って が処理される可能性があるため、予期しない動作は になる可能性があります。

私はあなたがまだあなたの機能を実装したいとししかし;-)

アイデア1:にDOMを変更する、代わりのUIWebViewのstringByEvaluatingJavaScriptFromString:メソッドを使用してJavaScriptを実行し、UIScrollViewの中のUIWebViewを埋め込みません以下のツールバーを追加してください。必要に応じて、いくつかのカスタムURLスキームを登録して、ツールバーにプッシュされたボタンからコールバックのobjective-cコードを呼び出すことができます。

アイデア2:UIWebViewをUIScrollViewに埋め込むのではなく、通常のUIViewに埋め込みます。 Vigneshの提案に基づいて、コールバックが呼び出されるたびにcontentOffsetcontentSizeの高さを確認して、デリゲートを介してwebViewの内部scrollViewのscrollViewDidScroll:コールバックを待ち受けます。それらが等しくなると、あなたが一番下にいることを意味します。これが発生すると、ツールバーのフレームをアニメートして、含まれているUIViewを「入力」し、WebViewのフレームを「押し込む」ことができます。

アイデア3:Appleの推奨事項を無視して、UIWebViewをUIScrollViewに埋め込みます。 Vigneshの提案に基づいて、コールバックが呼び出されるたびにcontentOffsetcontentSizeの高さを確認して、デリゲートを介してwebViewの内部scrollViewのscrollViewDidScroll:コールバックを待ち受けます。それらが等しくなると、あなたが一番下にいることを意味します。これが起こると、webViewのuserInteractionEnabledプロパティをNOに設定し、webViewとツールバーを含むscrollViewでYESに設定します。うまくいけば、スクロールは十分にスムーズに続くでしょう。もちろん、userInteractionEnabledをいつスイッチバックするかを決定するのと同じ方法で、スクロールビューを含む声を聞く必要があります。

このアイデアのバリエーションは、webViewの場合はuserInteractionEnabledをNOに設定するだけですが、webViewのフレームの高さをcontentSizeに合わせて設定し、それに応じてscrollViewのcontentSizeをそれに応じて拡大します。

どちらのバリエーションでも、リンクをクリックするなどの操作を行うことができない場合があるという欠点があります.-(しかし、おそらくそれはあなたのケースには十分です。少なくとも最初のバリエーションではそれほど悪くありません。

関連する問題