酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

UICollectionViewの初期表示時にズレる

メモ。覚えていたらあとで説明を書く。ケアレスミスしてた。

UICollectionViewの初期表示時にズレる

UICollectionViewを幅MAXで使わない時に初期表示時にズレるのか?

UITableViewCellの中にUICollectionViewを入れて使っている。

UICollectionView横スクロールしている。

pagingを有効にしていて、1ページ目から表示するようにしたかった。

UICollectionViewのcontentOffsetで下記のように指定していた。

fileprivate func updateDisplay() {
  let w = collectionView.frame.width
  collectionView.contentOffset = CGPoint(x: w, y: 0)
}

結果

tableView(_, cellForRowAt:)でUITableViewCellを生成して、UICollectionViewに表示するためのデータソース(なんらかの配列)を渡すけれど、AutoLayoutのレイアウト調整前なので、collectionView.frame.widthの値が0になっていた。

collectionViewの横幅の値を使用する前にlayoutIfNeeded()を呼ぶ必要があった。

fileprivate func updateDisplay() {
  collectionView.layoutIfNeeded()

  let w = collectionView.frame.width
  collectionView.contentOffset = CGPoint(x: w, y: 0)
}

2019/09/14追記

同じ現象でハマった件について別々の記事で書いてたのに気づいた。

blog.ch3cooh.jp