2
私は単純なUICollectionViewを持っており、ビューの幅が大きすぎるとセルのサイズを変更したいと思います。オリエンテーションの変更時にセルのサイズを変更するようにコレクションビューに正しく質問するにはどうすればよいですか?
1 /私は私のcollectionViewはエブリーの向きの変更で再描画されるように私のcollectionViewにinvalidateLayoutを呼び出すためにviewWillTransitionを上書き/
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let collectionWidth = collectionView.frame.width
var width:CGFloat
if collectionWidth > 500 {
width = collectionWidth/4 - 8
print("4 DE LARGE")
} else {
width = collectionWidth/3 - 8
print("3 DE LARGE")
}
return CGSize(width: width, height: width)
}
2 siZeForItemAt
で仕事をします。override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
self.collectionView.collectionViewLayout.invalidateLayout()
}
最初の方向変更では、それは素晴らしい作品です。しかし、私が別のビューに行って、私の最初のビューに戻って元の向きに戻ってくると、sizeForItemAtは呼び出されません。そして、私のセルのサイズは変わりません...なぜか分かりません。私は間違ったことをしていますか?
あなたが試したものと、うまくいかなかったものを含む最小限のコード例をお知らせください。あなたの説明はかなり謎めいています。 –
申し訳ありません、ここに私のコードです、私はそれを示すために私の最初のメッセージを編集します – Sylvain
私は新しいテストをしました。私がcollectionViewでビューに留まっていれば、問題はありません。オリエンテーションの変更は、viewWillTransitionによって正しく処理され、コレクションビューのレイアウトが更新されます。この問題は、向きを変えたり、別の表示に戻ったり、元に戻ったり、向きを変えたりするときに発生します。私はまだ理由を理解していない。どんな理想? – Sylvain