Ich kämpfe die ganze Zeit mit iOS gegen alles andere. Es geht normalerweise darum, Kontextprobleme zu stapeln. Es scheint mir, dass das Element position: stickyund unter left: 0iOS relativ zu dieser ersten Zeile wird. iOS behandelt den Stapelkontext nicht wie alle anderen Browser.
Ich habe nie wirklich genau herausgefunden, was dies verursacht. Technisch gesehen bleibt Ihre iPhone-Zelle auch beim Scrollen links hängen, da sie relativ zu der übergeordneten Zelle ist, die keine hat left: 0. Ich gehe davon aus, dass dies damit zu tun hat, wie iOS damit umgeht position: sticky. Sticky beginnt relativ und wechselt dann zu fest. Alle anderen Browser an diesem Punkt würden dazu führen, dass es links bleibt. Sie haben ein position: sticky;Element in einem position: sticky;Element. Das ist ein neuer Stapelkontext. Ich glaube, iOS macht es an seinem Elternteil fixiert und nicht so, wie Sie es erwarten würden. Da hat die übergeordnete Zeile nichtleft: 0es wird mit allem anderen scrollen. Ich hoffe das hilft. Ich sah kein Flackern, aber ich hatte ein paar kaputte Komponenten im Webframework meines Unternehmens, nachdem iOS 13 herauskam, das Scrollen und Stapeln von Kontexten beinhaltete. Ich würde auf mehreren iOS-Geräten testen.
Ich bin mir sicher, dass es sich um ein Problem mit dem Stapelkontext handelt, nachdem ich noch ein bisschen damit herumgespielt habe. Ich habe den Z-Index nur auf der iPhone-Zelle auf 1000 eingestellt, und die Zeilen darunter stehen NOCH darüber.

Wenn Sie den Internet Explorer nicht unterstützen müssen, würde ich CSS-Raster verwenden, um dieses Layout zu erreichen. Dann müssen Sie sich keine Sorgen machenposition: sticky
https://css-tricks.com/snippets/css/complete-guide-grid/
https://css-tricks.com/using-css-grid-the-right-way/
Ich verwende es für dynamische datenintensive Inhalte in Geschäftsanwendungen, sodass es unglaublich flexibel sein kann, wenn es richtig eingesetzt wird.
Erneut aktualisiert - Wenn Sie das DOM überhaupt nicht ändern können, müssen Sie sich mit dem Flackern befassen, da selbst für die Rasterlösung einige Elemente umbrochen werden müssen. Nur zur Verdeutlichung ... Bei einer Rasterlösung müssen Sie NICHT wissen, wie viele Spalten oder Zeilen Sie haben werden. Sie scheinen in diesem Aspekt aufgehängt zu sein. Rasterbereiche erstellen auch einen neuen Stapelkontext und machen alles relativ zum Rasterbereich, in dem es sich befindet, während flexible Einheiten zugelassen werden. Ich kann Ihnen keine Antwort geben, bis Sie zeigen, wie Ihre dynamischen Daten eingehen. Wir benötigen mehr Kontext, um Ihnen eine Codelösung zu bieten.
Wieder tritt das Flackern auf, weil Sie ein klebrig positioniertes Element in einem anderen klebrigen Element haben. Das ist nur iOS und wenn Sie es so verwenden möchten, müssen Sie sich nur darum kümmern.
Hier finden Sie eine Dokumentation zum Stapeln von Kontexten und deren Funktionsweise. Wie ich in einem Kommentar sagte, müssen Sie einen anderen Ansatz wählen oder sich einfach damit befassen.
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
Ebenfalls --
Verstecken Sie den Überlauf in Ihrem HTML und Body. Legen Sie eine Hülle um den Tisch. Legen Sie -webkit-overflow-scrolling: autodie Verpackung auf. Führen Sie es unter iOS 12 aus und Sie werden sehen, dass es nicht flackert. Sie werden jedoch kein Momentum-Scrolling haben. iOS13 hat die Notwendigkeit für das entfernt, -webkit-overflow-scrollingsodass Sie es nicht einmal überschreiben können. Wenn Sie den Wert von touchauf setzen, werden -webkit-overflow-scrollingSie jetzt flackern. Führen Sie diesen Code unten aus und Sie werden sehen, dass er nicht flackert. Lange Rede, kurzer Sinn, wie ich schon oft gesagt habe, müssen Sie einen anderen Ansatz finden. Sie können dies jetzt nicht beheben, da iOS13 nicht mehr verfügbar ist und Sie das Momentum-Scrollen sowieso nicht deaktivieren wollten.
html {
overflow: hidden;
width: 100%;
height: 100%;
}
body {
overflow: hidden;
height: 100%;
width: 100%;
}
.wrapper {
overflow: auto;
-webkit-overflow-scrolling: auto;
width: 100%;
height: 100%;
}
.table {
width: 2000px;
position: relative;
}
.tr {
overflow: visible;
display: block;
white-space: nowrap;
font-size: 0;
}
.tc {
border: 1px solid #DDD;
display: inline-block;
width: 100px;
height: 100px;
text-align: center;
font-size: 12px;
}
.trh {
background: #000;
color: #FFF;
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 1;
}
.tc.first {
background: #000;
color: #FFF;
position: -webkit-sticky;
position: sticky;
left: 0;
}
<html>
<head>
<link rel="stylesheet" href="css.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="wrapper">
<div class="table">
<div class="tr trh">
<div class="tc first">Iphone</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
<div class="tc">value</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">2</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
<div class="tr">
<div class="tc first">a set</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
<div class="tc">0</div>
</div>
</div>
</div>
</body>
</html>