シナリオ:私が取り組んでいるプロジェクトでは、ブートストラップ3モーダルに非同期的にロードされる必要があります。実際のローディングは問題ではありません(下の「Codepen」を参照してください)が、読み込まれたコンテンツが大きい場合、iOS 9デバイスをスクロールすることが問題です。これは、iOS 8を含め、私が試した他のすべてのデバイスで正しく動作します。DOMはスクロールの高さを更新しないので、モーダルがスクロール可能であるとは思われません。動的にロードされたブートストラップモーダルがiOS 9でスクロールしない
私が見つけた唯一の解決策は、モーダルのボディを非表示にして再計算を強制することです(ただし、受け入れられません)。ブートストラップ自身のhandleUpdate
関数は、この問題を処理しません。
私はCodepenの最小の例をhttp://codepen.io/jkrehm/full/LpRzJV/(コードはhere)に作成しました。 QRコードを私の質問に埋め込むことができれば、あなたの携帯電話で簡単に手に入ります。
最も関連性の高いコードはこれです:
// Show loader & then get content when modal is shown
$modal.on('show.bs.modal', function(e) {
$(this).find('.modal-body')
.html('loading...')
.load('https://baconipsum.com/api/?type=meat-and-filler¶s=10', function() {
// Use Bootstrap's built-in function to fix scrolling (to no avail)
$modal.modal('handleUpdate');
});
});
私は、コードを変更した場合、コンテンツがロードされるよう前にモーダルが示され、ちょうど(物事が正常に動作しますが、ユーザーのためのロードインジケータがありませんボタンをクリックしてからモーダルが現れるまでの間に不定期の長さの休止)。
要約:.modal-body
のスクロールの高さを再計算するためにiOS 9を納得させるにはどうすればよいですか?
アップデート(2017年8月15日):
どうやら、この問題への十分な解像度がありません。ブートストラップは、モーダルからremove-webkit-overflow-scrolling:touch
に選ばれ、bugをWebkitで提出しました。多分それはいつか固定されるでしょう、多分そうではないでしょう。今のところ、提供されている回避策は最良の「解決策」です。
の可能性のある重複(https://stackoverflow.com/questions/19060301/how-to-prevent-background-スクロール時 - ブートストラップ時 - モーダル - モバイル上で開く - 閲覧) –
それはその質問の複製ではありませんが、答えが解決される可能性があります。根本的な問題は、ブラウザのバグです(https://bugs.webkit.org/show_bug.cgi?id=158342)。ブートストラップには解決策がないので、 '-webkit-overflow-scrolling:touch'を完全に削除する必要がありました(https://github.com/twbs/bootstrap/pull/20803)。 – jkrehm