我有一個分頁的水平滾動UICollectionView
,其中每個單元格佔用視圖/設備屏幕的大小,並且一次顯示一個單元格。我遇到了一個問題,在設備旋轉時,單元格將轉換爲正確的新大小,但單元格的位置將關閉。在旋轉時調整UICollectionViewCells的大小會更改當前可見單元格
循環之前:
在旋轉,我不僅是如何可以調整集合視圖細胞正常,但確保當前單元格仍然顯示:
旋轉後?
我把這個問題歸結爲一個沒有自定義流佈局的非常簡單的例子。
設置細胞對collectionView
幀的大小的大小(集合視圖是視圖控制器的保持它的大小):
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()
}
實際上,如果我在viewWillLayoutSubviews
中調用invalidateLayout()
,則不需要在這裏設置itemSize
,因爲在重新創建佈局時將調用sizeForItemAtIndexPath
。
我也試着旋轉過程中手動滾動到第一個可見單元格設置新itemSize後,卻顯示沒有改善:你UICollectionView
的
if let item = collectionView.indexPathsForVisibleItems().first {
collectionView.scrollToItemAtIndexPath(item, atScrollPosition: .CenteredHorizontally, animated: true)
}