ビューを整然とした列に配置できるように、UICollectionViewを作成しました。私は500ピクセル以上の幅のデバイス上に単一の列があることを望みます。UICollectionView - デバイス上のセルのサイズを変更する - Swift
これを達成するために、私はこの関数を作成:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let size = collectionView.frame.width
if (size > 500) {
return CGSize(width: (size/2) - 8, height: (size/2) - 8)
}
return CGSize(width: size, height: size)
}
最初のロード時に予想されるように、これは動作しますが、私は、デバイスを回転させたときただし、計算は常に再び起こる、とビュードンはありませんが期待どおりに常に再描画しません。ここでは、デバイスを回転させたときのために私のコードです:私は何かを再描画するために忘れてしまったと仮定してい
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
collectionView.collectionViewLayout.invalidateLayout()
self.view.setNeedsDisplay()
}
は、私はよく分かりません。どんなアイデアも非常に感謝して受け取ります!
あなたが無限ループに入ります。 – valvoline
@valvolineが正しいと確信していないので、無限ループが発生しますが、必要以上に頻繁にcollectionviewレイアウトを無効にするため、パフォーマンスの問題が発生する可能性があります。 'viewWillTransitionToSize'を使うほうがずっと良いです。 – JosephH
このコードは、無限ループを引き起こします。正解ではありません。 – Josh