Questa è la vista dell'app quando è in modalità verticale. La vista raccolta non aggiorna il layout a rotazione
Quando è ruotato alla modalità orizzontale che appare così
La vista debugger mostra che il UIWindow
non sta ruotando come mostrato qui
Il UICollectionViewController
viene creato tramite StoryBoard. Ho provato la sottoclasse UICollectionViewFlowLayout
che implementa shouldInvalidateLayoutForBoundsChange
, ma non risolve il mio problema.
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
CGRect oldBounds = self.collectionView.bounds;
if (CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) {
return YES;
}
return NO;
}
Si prega di fornire idee su cosa controllare successivamente o richieste di codice aggiuntivo per il debug.
Modifica - Come suggerito da MirekE, ho tentato di aggiungere vincoli allo CollectionView
ma non è stato possibile. Tutte le opzioni per Editor-> Pin non sono disponibili per CollectionView
.
Edit, la risposta ad Andrea -
ho scelto come target iOS8.3. La mia comprensione è che il metodo principale chiamato a rotazione è viewWillTransitionToSize:withTransitionCoordinator:
, che è dallo UIContentContainer
protocol. Ho aggiunto il seguente al mio CollectionViewController, ma lo stesso problema persiste
-(void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator {
[self.collectionView.collectionViewLayout invalidateLayout];
[self.collectionView reloadData];
}
sembra che tu abbia dato dei vincoli specifici per ogni cella, è necessario? –
Vinay - sì c'è un vincolo 'topMargin' e' centerX' sull'etichetta all'interno della cella, ma nessun vincolo sulla cella stessa. – Idr
Secondo il documento, penso che dovresti chiamare la super implementazione in 'viewWillTransitionToSize' ad un certo punto. –