UIWebViewをTable Viewセルに配置し、スクロールバーを維持するにはどうすればよいですか?
-
22-07-2019 - |
質問
UIWebViewをテーブルビューセルに配置しながら、UIWebViewのスクロールバーを維持するにはどうすればよいですか?私のテーブルビューには複数のセルとヘッダーフレームもあり、行が多いためスクロール可能にする必要があります。
UITextViewを使用するとテキストは完璧に表示され、スクローラーも表示されますが、問題はコンテンツがリッチテキストであるため、UIWebViewでコンテンツを表示する以外のオプションがないことです。アイデア、ハッキング?
解決
Appleがそれについて何かしなければ、これは機能しません。 UITableViewとUIWebViewはどちらもスクローラーをサポートしており、互いに矛盾しています。 UITableViewスクローラーは優先されるため、スクロール操作が実行されるたびに、UIWebViewではなくUITableViewにアクションが送信されます。
何らかの理由で、UITableViewでUITextViewを使用すると、両方でスクローラーが機能します。
他のヒント
UIWebViewをテーブルセルに追加する際の問題は、これらのオブジェクトが両方ともスクロール可能(tableviewとwebview)であるため、適切に使用しないと合併症を引き起こすことです。テーブルビューには、uiwebview以外のセルがありますか?スクロール可能なTableViewが必要ですか?テーブルビューをスクロール可能にする必要がない場合は、Webビューでスクロールを有効にし、テーブルビューでは無効にします。動作するはずです。
ただし、テキストを表示するだけの場合は、UITextViewを使用しないでください(UITextViewでも同じ問題に直面しますが)?
UIWebViewのドキュメントでこれを見つけました:
"重要:UIScrollViewオブジェクトにUIWebViewまたはUITableViewオブジェクトを埋め込まないでください。これを行うと、2つのオブジェクトのタッチイベントが混同され、誤って処理される可能性があるため、予期しない動作が発生する可能性があります。
UIWebViewにコンテンツを配置すると、スクロールバーが自動的に追加されます。必ず[ページを拡大縮小する]のチェックを外してください。 Interface Builderで表示されるため、ページは表示時に再スケーリングされません。
UIWebViewは、UIViewの高さを超えるコンテンツがある場合、自動的にスクロールバーを表示します。
UISCrollViewの canCancelTouchEvents
プロパティを NO
に設定することにより、UIWebViewをUIScrollViewに配置し、両方をスクロール可能にすることができます。フリックするだけで、UIScrollViewがスクロールします。指を短押ししてからフリックを開始すると、UIWebViewがスクロールします。
このクイックハックを試して、Webビューにスクロールインジケーターを強制的に表示できるかどうかを確認してください。 ((UIScrollView *)[webView.subViews objectAtIndex:0])。showsVerticalScrollIndicator = YES;
より徹底的なアプローチは、セルの内容を要約と詳細に分割することです。各セルに要約を表示しますが、詳細は表示しません。セルを選択したら、新しい画面を使用して、選択したセルの内容全体を表示します。これにより、スクロール可能なビュー内にスクロール可能なビューがあるというユーザビリティの問題が完全に回避されます。