contentOffset pas mis à jour sur UICollectionView si scrollToItemAtIndexPath est appelée à l'intérieur d'viewWillAppear

J'ai un UICollectionView qui est utilisé pour simuler le nouveau calendrier dans iOS 7. Cette collection de point de vue est à l'intérieur d'un contrôleur qui a une propriété selectedDate. Chaque fois que la propriété selectedDate est de définir l'affichage de la collection devrait faire défiler jusqu'à la date de l'affichage de la collection.

Le calendrier du contrôleur de viewWillAppear également s'assurer de la date sélectionnée est visible parce que ce contrôleur est mis en cache et réutilisés.

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self.calendarView scrollToDate:[self selectedDate] animated:NO];
}

Le problème est que la première fois que le calendrier contrôleur est montré le défilement ne fonctionne pas. Le contentOffset de l'affichage de la collection n'est pas mis à jour.

Ma solution actuelle est de planifier le faites défiler jusqu'à se produire sur la prochaine exécution de la boucle à l'aide de

dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), ^(void)
{
        //Scroll to the date.
    });

Ça ressemble quand la UICollectionView n'est pas dans une fenêtre, vous ne pouvez pas faire défiler. La planification de la faire défiler jusqu'à arriver à la prochaine exécution de la boucle de s'assurer que le point de vue a été ajouté à la fenêtre et peut être correctement défiler.

Quelqu'un d'autre a rencontré ce problème, et de ce que leurs solutions de contournement?

  • Je rencontre le même problème (ironiquement, après la construction d'un calendrier similaire de contrôle). Ma solution a été de les animer l'défiler pendant viewDidAppear:
InformationsquelleAutor Reid Main | 2013-10-01