Iが水平各セルは、ビュー/デバイスの画面のサイズを占め、1個のセルが一度に表示さUICollectionView
スクロール、ページ分割を有します。デバイスの回転で、セルが正しいサイズに移行する問題が発生していますが、セルの位置はオフになります。回転前リサイズUICollectionViewCells現在表示されているセル
:
回転後:回転に
、どのように私はきちんとコレクションビューのセルのサイズを変更するが、現在のセルが表示されたままになりますことを確認することができるだけでなく、 ?
私はこの問題を、カスタムフローレイアウトなしの非常に簡単な例にまで煮詰めました。
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return collectionView.frame.size
}
viewWillLayoutSubviews
の回転を処理するためにしよう:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return }
flowLayout.itemSize = collectionView.frame.size
flowLayout.invalidateLayout()
}
collectionView
フレームのサイズへの細胞の大きさを設定
は
(コレクションビューは、ビューコントローラのサイズを保持しています)私はviewWillLayoutSubviews
でinvalidateLayout()
を呼び出す場合
実は、ここitemSize
を設定すると、レイアウトが再作成されたときにsizeForItemAtIndexPath
が呼び出されるよう、必要はありません。
私も新しいitemSizeを設定した後、回転中に最初の可視セルにスクロール手動で試してみたが、それは何の改善を示しています
if let item = collectionView.indexPathsForVisibleItems().first {
collectionView.scrollToItemAtIndexPath(item, atScrollPosition: .CenteredHorizontally, animated: true)
}