itLinkedInPocketCopyこんにちは。Self-sizingセルを活用してCollectionViewを作成すると、スクロールした時にもうreloadDataを利用するとoffsetがジャンプしてしまうバグに悩まされました。その対応、備忘録です。0.0)先頭までは行かないがy座標がズレるという問題がありました。サイズ可変等を利用すると発生していました。結論として、estimatedSizeの計算がしっかりされておらず座標ずれが発生していたようです。.automaticをやめて、面倒ですがsizeForItemAtでサイズを計算して返してあげることで解消できました。計算してreturnする}この結論に至るために試してみたことは以下です。試したことsetContentOffset()を利用し強制的に座標を戻す一見するとこれで行けそうですし、割とこれ系のバグのワークアラウンドとしてどこでも紹介されてたりします。これを行っても効果はありませんでした。false)しっかりとした原因究明はできなかったのですが、デバッグしてみるとsetContentOffsetがうまく効いていないようでした。reloadItemsを利用すると座標ズレは解消できましたがヘッダー・フッターの位置がバグってしまうバグに今度は遭遇。このバグを誤魔化す術が見つからなかったので利用を断念。それとcontentOffsetズレを解消されるのですが、reloadを欠けた時に一瞬再構成?のアニメーションというかグラデーションが入るので、う〜んという感じ。同様にメインスレッドで調整してもダメでした。セルの再構成Autolayoutのwarningが出ていたり、割と複雑な構成のセルを利用していたこともあり、セルを0から再構成することを試みましたが効果なし。DiffableDataSourceの利用iOS13から利用できる二つを試してみましたが座標ズレには効果なし。そもそも、私のプロジェクトではAPIレスポンスに応じてセルのサイズが変わるというケースで、このような動的なデータによるレイアウト作成はあまりCompositionalLayoutには向かないかもしれないことに気付きました。compositionalLayoutはItemやGroupという概念を利用してパターン化したり全体的なSection構成をしたりするのですが、作成の段階でサイズを決めるので固定サイズをレイアウトする際は非常に使いやすいです。上記のようなケースの場合、データを渡してあげて、それをベースにパターンを作成して構成しないと行けないので少々コストがかかります。それが例えば追加取得や無限スクロールがある場合だと、その度にデータを渡して再構成しなければいけないので、あまり向かいないなぁと。セルやセクションの個数やレイアウトパターンが決まっている場合は断然CompositionalLayoutの方がFlowLayoutよりいいですね。DiffableDataSourceの使い方はこちらで説明しています。上記のような方法を試してみてダメだったので、この不具合が出たらestimatedSizeに着目してみてください。estimatedSizeがしっかり適用される方法があればself-sizingでもいけそうですが、検証がまだ行き届いていません。手っ取り早くサイズ計算して返してあげると改善されました。itLinkedInPocketCopy【Swift】sectionHeadersPinToVisibleBoundsを設定するとスクロールがカクつく不具合修正Next【Swift】自動生成されたモデルをドメインモデルに入れ替えるメリットPrev関連記事iOSアプリ開発:初期マストでいれるライブラリまとめワッツァップピーポー、しょーです。...親クラスの共通初期値設定をするアイデアこんちわ、しょーです。...【Swift】MKMapView:ピンに画像やCustomViewを設定するこんにちは。ページャーライブラリParchmentの使い方こんにちわ、しょーです。...【SwiftUI】Stackに詰め込んだTextが省略されるのを解消するこんにちは。SwiftUI、ようやっとキャッチアップ始めました。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。ディベカパは私が学んだiOSアプリ、Swift、デザインなどの情報をツラツラしていく場所です。