私はいつもiOSと他のものすべてとの奇妙さを戦っています。通常、スタッキングコンテキストの問題が関係しています。position: sticky
and left: 0
要素がiOSの最初の行に相対的になるように見えます。iOSは、他のすべてのブラウザーと同じようにスタックコンテキストを処理しません。
何が原因なのか正確にはわかりません。技術的には、iPhoneのセルは、スクロールしているときでも左側に固定されていますleft: 0
。これはiOSの処理方法に関係していると思いますposition: sticky
。スティッキーは相対的に始まり、固定に変わります。その時点で他のすべてのブラウザはそれを左に固定させます。あなたは持っているposition: sticky;
内部要素position: sticky;
の要素を。それが新しいスタッキングコンテキストです。iOSはそれを親に固定するものであり、あなたが期待する方法ではないと信じています。親行にはないのでleft: 0
それは他のすべてと一緒にスクロールします。これがお役に立てば幸いです。ちらつきはありませんでしたが、iOS 13が登場し、スクロールコンテキストとスタックコンテキストが含まれるようになった後、会社のWebフレームワークに壊れたコンポーネントがいくつかありました。複数のiOSデバイスでテストします。
それを少し試して編集した後、スタッキングコンテキストの問題であると確信しています。iphoneセルのみでz-indexを最大1000に調整すると、STILLの下の行がその上に表示されます。

Internet Explorerをサポートする必要がない場合は、CSSグリッドを使用してこのレイアウトを実現します。その後、あなたは心配する必要はありませんposition: sticky
https://css-tricks.com/snippets/css/complete-guide-grid/
https://css-tricks.com/using-css-grid-the-right-way/
ビジネスアプリケーションの動的なデータが多いコンテンツに使用するため、適切に活用すれば非常に柔軟になります。
再度更新-DOMをまったく変更できない場合、グリッドソリューションでも一部の要素のラッパーが必要になるため、ちらつきに対処する必要があります。ただ明確にするために ....グリッドソリューションでは、列または行の数を知る必要はありません。あなたはその側面に夢中になっているようです。グリッド領域は、新しいスタッキングコンテキストも作成し、フレキシブルユニットを許可しながら、グリッド領域を基準にしてすべてを作成します。動的データがどのように取り込まれるかを示すまで、答えを出すことはできません。コードソリューションを提供するには、より多くのコンテキストが必要です。
繰り返しますが、別のスティッキー要素の中にスティッキー配置要素があるため、ちらつきが発生しています。それはただのiOSであり、このように使用したい場合は、それに対処する必要があります。
ここに、スタックコンテキストとその動作に関するドキュメントがあります。コメントで述べたように、あなたは別のアプローチを取るか、単にそれに対処する必要があります。
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
また-
HTMLと本文のオーバーフローを非表示にします。テーブルの周りにラッパーを置きます。-webkit-overflow-scrolling: auto
ラッパーを被せます。iOS 12で実行すると、ちらつきがなくなります。ただし、勢いのあるスクロールはありません。iOS13ではの必要性がなくなったため、-webkit-overflow-scrolling
オーバーライドすることもできません。touch
on の値を設定-webkit-overflow-scrolling
すると、ちらつきが発生します。以下のコードを実行すると、ちらつきがなくなります。長い話ですが、私が何度も言ったように、別のアプローチを見つける必要があります。iOS13がリリースされた今、これを修正することはできず、とにかくモーメンタムスクロールを無効にしたくなかったでしょう。
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>