Szenario: Das Projekt, an dem ich arbeite, erfordert, dass Inhalte asynchron in ein Bootstrap 3-Modal geladen werden, wobei dem Benutzer die Ladeanzeige angezeigt wird. Das tatsächliche Laden ist kein Problem (siehe mein Codepen unten), aber ein Problem ist Scrollen auf iOS 9-Geräten, wenn der geladene Inhalt groß ist. Es funktioniert auf jedem anderen Gerät, das ich ausprobiert habe, einschließlich iOS 8. Ich denke, das DOM aktualisiert die Scroll-Höhe nicht, so dass das Modal nicht scrollbar sein sollte.Dynamisch geladenes Bootstrap-Modal scrollt nicht auf iOS 9
Der einzige Workaround, den ich gefunden habe, der zuverlässig funktioniert (aber inakzeptabel ist) ist, den Körper des Modals zu verstecken/anzuzeigen, was eine Neuberechnung erzwingt. Bootstrap's eigene handleUpdate
Funktion kümmert sich nicht um das Problem.
Ich habe ein minimales Beispiel für Codepen unter http://codepen.io/jkrehm/full/LpRzJV/ (Code verfügbar here) erstellt. Ich wünschte, ich könnte einen QR-Code in meine Frage einbetten, damit Sie leicht auf Ihren Telefonen dazu kommen können.
Der relevanteste Code ist dies:
// 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');
});
});
Wenn ich den Code ändern, damit der Inhalt vor geladen wird die modale gezeigt wird, die Dinge gut funktionieren, aber es gibt keine Ladeanzeige für den Benutzer (nur eine Pause von unbestimmter Länge, nachdem sie auf den Knopf geklickt haben und bevor das Modal erscheint.
Zusammenfassung: Was kann ich tun, um iOS 9 zu überzeugen, die Bildlaufhöhe .modal-body
neu zu berechnen?
Update (15. August 2017):
Anscheinend gibt es keine zufriedenstellende Lösung für dieses Problem. Bootstrap hat remove-webkit-overflow-scrolling:touch
aus den Modals gewählt und einen bug mit Webkit darüber abgelegt. Vielleicht wird es eines Tages repariert werden, vielleicht nicht. Vorerst sind die bereitgestellten Work-Arounds die besten "Lösungen".
Möglichem Duplikat [? Wie Hintergrund verhindern Scrollen, wenn Bootstrap 3 modal offen auf mobilen Browser] (https://stackoverflow.com/questions/19060301/how-to-prevent-background- scrolling-when-bootstrap-3-modal-open-on-mobile-browse) –
Es ist kein Duplikat dieser Frage, obwohl es möglich ist, dass die Antwort es beheben wird. Das zugrunde liegende Problem ist ein Browser-Bug (https://bugs.webkit.org/show_bug.cgi?id=158342). Bootstrap hat keine Lösung dafür, also mussten sie '-webkit-overflow-scrolling: touch' komplett entfernen (https://github.com/twbs/bootstrap/pull/20803). – jkrehm