読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

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

UICollectionViewの初期表示時にズレる

Swift

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

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)
}