2012-09-26 46 views
8

Con suerte una pregunta simple para un relativamente nuevo UIKit de controlCuando es el momento apropiado en rotación para cambiar los parámetros de diseño de un UICollectionView

Tengo un UICollectionView que tiene un viewLayout con una sola hilera de células que son la exacta altura de los límites UICollectionView en modo vertical

Por lo tanto, cuando el iPad cambia al modo Paisaje, esa fila se vuelve más alta que la pantalla, en ese punto el diseño falla casi (casi) y se queja de que la fila es más alta que los límites.

¿Cuál es la forma ideal de manipular las características de viewLayout, particularmente en lo que se refiere a la respuesta a la rotación en un ViewController?

Respuesta

3

Estoy trabajando en un problema similar.

Actualmente, mi UICollectionViewController tiene dos variables de instancia de UICollectionViewFlowLayout, cada una con las inserciones apropiadas para portait u horizontal.

En la rotación, hago esto:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
           duration:(NSTimeInterval)duration{ 

    if (UIDeviceOrientationIsPortrait(toInterfaceOrientation)) { 
     [_itemCollection setCollectionViewLayout:_portraitLayout]; 
     [_itemCollection reloadData]; 
    } else { 
     [_itemCollection setCollectionViewLayout:_landscapeLayout]; 
     [_itemCollection reloadData]; 
    } 
} 

El único problema que estoy teniendo es que se bloquea al azar con EXC_BAD_ACCESS en setCollectionViewLayout al azar.

Algo similar a lo anterior podría funcionar para usted. No estoy seguro de si esta es la forma correcta de hacer las cosas. Recientemente comencé a usar UICollectionViews.

+4

Esto funciona para mí. Pero en lugar de usar 'setCollectionViewLayout' solo modifico la propiedad que necesito en' sizeForItemAtIndexPath'. Eso se llama como resultado de 'reloadData'. –

+1

llamada [super willRotateToInterfaceOrientation: toInterfaceOrientation duration: duration] missed. –

Cuestiones relacionadas