Ich habe eine UICollectionView erstellt, so dass ich Ansichten in ordentliche Spalten arrangieren kann. Ich möchte, dass eine einzelne Spalte auf Geräten mit einer Breite von> 500 Pixel angezeigt wird.UICollectionView - Ändern der Größe von Zellen auf dem Gerät drehen - Swift
Um dies zu erreichen, habe ich diese Funktion:
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)
}
Dies als beim ersten Laden erwartet funktioniert, aber wenn ich das Gerät drehen, die Berechnung nicht immer wieder passieren, und die Ansichten don Zeichne immer wie erwartet neu. Hier ist mein Code für, wenn das Gerät gedreht wird:
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
collectionView.collectionViewLayout.invalidateLayout()
self.view.setNeedsDisplay()
}
Ich gehe davon aus ich habe vergessen, etwas neu zu zeichnen, aber ich bin nicht sicher, was. Irgendwelche Ideen werden sehr dankbar empfangen!
von diesem Ansatz werden Sie eine Endlosschleife eingeben. – valvoline
Ich bin nicht sicher, dass @valvoline korrekt ist, dass dies eine Endlosschleife verursacht - aber es kann durchaus zu Leistungsproblemen kommen, da es das Sammlungsansichtslayout viel öfter als notwendig ungültig macht. Es ist viel besser, 'viewWillTransitionToSize' zu verwenden. – JosephH
Dieser Code verursacht eine Endlosschleife. Es sollte nicht die richtige Antwort sein. – Josh