5

Ho un UITableViewController incorporato in un UINavigationController e sto cercando di implementare Peek & Pop in TableView. Ho la parte "peek" che funziona perfettamente, ma quando provo a "pop" nel prossimo ViewController, la cella che ho "sbircia" e la cella successiva sono mostrate entrambe. Sto "scoppiando" in un UICollectionView e, come ho detto, la metà "peek" mostra la cella corretta, ma il "pop" no. Questo problema si verifica solo quando utilizzo [self.navigationController showViewController:viewControllerToCommit sender:nil]; o [self.navigationController pushViewController:viewControllerToCommit animated:YES]; per eseguire il "pop".Peek & Pop: il pop porta alla cella errata in UICollectionView

Ecco la "Peek" mostra la cella corretta Peek showing correct cell

E il "Pop" che mostra la cella sbagliata (s)
Pop showing wrong cell

ho provato ad usare [self presentViewController:viewControllerToCommit animated:YES completion:nil]; e viene mostrata la cella corretta , eccetto questo non mi dà gli elementi di navigazione di cui ho bisogno, quindi non posso usarlo (a meno che non ci sia un modo per recuperare tutti gli elementi di navigazione).

Il mio pensiero iniziale è che c'è qualcosa di sbagliato nel modo in cui la mia app sta calcolando la dimensione di CollectionViewCell. Ecco il codice che sto usando per quello, anche se sembra che funzioni correttamente con qualsiasi cosa diversa da Peek & Pop.

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    CGSize collectionViewBounds = collectionView.bounds.size; 

    int navigationHeight = self.navigationController.navigationBar.bounds.size.height; 
    int toolbarHeight = self.navigationController.toolbar.bounds.size.height; 
    int statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height; 

    int cellHeight = collectionViewBounds.height - (navigationHeight + statusBarHeight + toolbarHeight); 
    int cellWidth = collectionViewBounds.width; 

    return CGSizeMake(cellWidth, cellHeight); 
} 

da aggiungere alla mia confusione, la "pop" funziona perfettamente quando il primo o l'ultimo elemento della TableView sono "sbirciato". Qualsiasi aiuto con questo sarebbe molto apprezzato.

+0

È possibile aggiungere il 'viewControllerToCommit' ad un' UINavigationController' e * presente * che 'navigationController' a _get tutti gli elementi di navigazione back_ –

+0

Ho cercato di creare un nuovo' UINavigationController' e miei dati non è stato caricato nella nuova vista 'cellula, e l'unico elemento di navigazione che è apparso era un BLANK 'UINavigationBar' e vuoto' UIToolBar' – Nick

risposta

2

Così ho finalmente capito che cosa stava causando questo problema. La mia app è un'app universale e utilizzo un popover Segue su iPad. Nel viewWillAppear del mio ViewController che si "scoppia" in modo errato, io uso [self setPreferredContentSize:CGSizeMake(400.0, 600.0)] per determinare la dimensione del Popover su un iPad. Una volta rimossa questa linea, il mio Pop Peek & ha funzionato perfettamente.

Ho finito per aggiungere una nuova proprietà al mio ViewController @property BOOL fromPeek e impostare tale proprietà su YES in - (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location del mio ViewController in anteprima. Infine, ho modificato il mio viewWillAppear in if(!fromPeek) [self setPreferredContentSize:CGSizeMake(400.0, 600.0)]; e ora il problema è risolto!