Ho creato un UICollectionView, in modo da poter disporre le viste in colonne pulite. Mi piacerebbe che ci fosse un'unica colonna su dispositivi> 500 pixel di larghezza.UICollectionView - ridimensionamento delle celle sul dispositivo ruota - Swift
Per ottenere questo, ho creato questa funzione:
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)
}
Questo funziona come previsto in primo carico, tuttavia quando ho ruotare il dispositivo, il calcolo non sempre avviene di nuovo, e la vista don sempre si ridisegna come previsto. Ecco il mio codice per quando il dispositivo viene ruotato:
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
collectionView.collectionViewLayout.invalidateLayout()
self.view.setNeedsDisplay()
}
sto assumendo ho dimenticato di ridisegnare qualcosa, ma non sono sicuro che cosa. Tutte le idee sono molto grate ricevute!
utilizzando questo approccio si entra in un ciclo infinito. – valvoline
Non sono sicuro che @valvoline sia corretto che ciò causerà un ciclo infinito, tuttavia potrebbe causare problemi di prestazioni poiché invalida il layout di collectionview molto più spesso del necessario. È molto meglio usare 'viewWillTransitionToSize'. – JosephH
Questo codice causa un ciclo infinito. Non dovrebbe essere la risposta corretta. – Josh