Combatto le stranezze con iOS vs tutto il resto tutto il tempo. Di solito comporta problemi di accatastamento del contesto. Mi sembra che l' elemento position: stickye left: 0diventi relativo a quella prima riga su iOS. iOS non gestisce il contesto di impilamento come tutti gli altri browser.
Non ho mai capito esattamente cosa causi questo. Tecnicamente il tuo cellulare iPhone è bloccato a sinistra anche quando sta scorrendo perché è relativo al suo genitore che non ha left: 0. Suppongo che questo abbia a che fare con il modo in cui iOS gestisce position: sticky. Sticky inizia relativo e poi passa a fisso. Tutti gli altri browser a quel punto lo farebbero rimanere sulla sinistra. Hai un position: sticky;elemento dentro un position: sticky;elemento. Questo è un nuovo contesto di accatastamento. Credo che iOS lo renda fisso al suo genitore e non come ti aspetteresti. Dal momento che la riga padre non haleft: 0scorrerà con tutto il resto. Spero che questo possa essere d'aiuto. Non ho visto sfarfallio, ma ho avuto alcuni componenti rotti nel framework web della mia azienda dopo che iOS 13 è uscito con contesti di scrolling e stacking. Vorrei testare su più dispositivi iOS.
modifica dopo averci provato un po 'di più, sono sicuro che si tratti di un problema di sovrapposizione. Ho attivato l'indice z fino a 1000 solo sulla cella dell'iPhone e le righe sotto STILL appaiono sopra di esso.

Se non dovessi supportare Internet Explorer, utilizzerei le griglie CSS per ottenere questo layout. Quindi non dovrai preoccupartiposition: sticky
https://css-tricks.com/snippets/css/complete-guide-grid/
https://css-tricks.com/using-css-grid-the-right-way/
Lo uso per dati dinamici con contenuti pesanti nelle applicazioni aziendali, quindi può essere incredibilmente flessibile se sfruttato correttamente.
Aggiornato di nuovo - Se non riesci affatto a cambiare il DOM, dovrai affrontare lo sfarfallio poiché anche la soluzione di griglia richiederà involucri attorno ad alcuni elementi. Giusto per chiarire .... Con una soluzione a griglia NON devi sapere quante colonne o righe avrai. Mi sembri appeso a quell'aspetto. Le aree della griglia creano anche un nuovo contesto di accatastamento e rendono tutto relativo all'area della griglia in cui si trova consentendo unità flessibili. Non posso darti una risposta finché non mostrerai come arrivano i tuoi dati dinamici. Abbiamo bisogno di più contesto per darti una soluzione di codice.
Ancora una volta, lo sfarfallio sta avvenendo perché hai un elemento appiccicoso posizionato all'interno di un altro elemento appiccicoso. Questo è solo iOS e se vuoi usarlo in questo modo, dovrai affrontarlo.
Ecco la documentazione sui contesti di impilamento e su come funzionano. Come ho affermato in un commento, dovrai adottare un approccio diverso o semplicemente affrontarlo.
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
Anche --
Nascondi l'overflow sul tuo HTML e Body. Metti un involucro attorno al tavolo. Indossa -webkit-overflow-scrolling: autola confezione. Eseguilo su iOS 12 e non vedrai sfarfallio. Tuttavia, non avrai slancio. iOS13 ha rimosso la necessità di -webkit-overflow-scrollingquindi non puoi nemmeno ignorarlo. Se si mette il valore di touchsu -webkit-overflow-scrolling, ora si avrà uno sfarfallio. Esegui questo codice qui sotto e vedrai che non lampeggerà. Per farla breve, come ho già detto molte volte, dovrai trovare un approccio diverso. Non puoi risolvere questo problema ora che iOS13 è uscito e non avresti davvero voluto disabilitare lo scorrimento del momentum comunque.
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>