2017-03-03 6 views
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は呼び出されません。そして、私のセルのサイズは変わりません...なぜか分かりません。私は間違ったことをしていますか?

+0

あなたが試したものと、うまくいかなかったものを含む最小限のコード例をお知らせください。あなたの説明はかなり謎めいています。 –

+0

申し訳ありません、ここに私のコードです、私はそれを示すために私の最初のメッセージを編集します – Sylvain

+0

私は新しいテストをしました。私がcollectionViewでビューに留まっていれば、問題はありません。オリエンテーションの変更は、viewWillTransitionによって正しく処理され、コレクションビューのレイアウトが更新されます。この問題は、向きを変えたり、別の表示に戻ったり、元に戻ったり、向きを変えたりするときに発生します。私はまだ理由を理解していない。どんな理想? – Sylvain

答えて

0

同じ問題が、幅をUIScreenと関連付けることで修正されていました。私の場合、セルは左から右に展開されます。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let width = UIScreen.main.bounds.width 
    return CGSize(width: width, height: 150) 
} 
関連する問題