UITableView contentSize

Avoir un problème avec un couple de vues de table dans mon application.

Le problème se produit lorsque le contenu de la table de change (et donc le contenu de la tableview est plus grand).

Pour une raison quelconque, le contentSize de la UITableView reste le même sens, je ne peux pas faire défiler pour voir le nouveau contenu.

Ceci arrive quand une cellule particulière devient plus grand (après un [tableView reloadData];) ou quand je ajouter de nouvelles cellules (à l'aide de la NSFetchedResultsController délégué méthodes).

Est-il quelque chose que je dois faire pour la tableView de réajuster ses contentSize?

Modifier pour afficher le code, mais c'est juste réutilisable NSFetchedResultsController délégué code...

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
//The fetch controller is about to start sending change notifications, so prepare the table view for updates.
[self.tableView beginUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:(OJFPunchListCell*)[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id )sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
switch(type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
//The fetch controller has sent all current change notifications, so tell the table view to process all updates.
[self.tableView endUpdates];
}

J'ai fait ce genre de chose avant d'en iOS5 et n'a jamais eu un problème avec elle. Semble que c'est potentiellement un iOS6 changement?

::EDIT::

La bêtise, c'est que j'ai un certain nombre d'autres UITableViewControllers dans la même application et ils sont tous fonctionne bien. Je peux ajouter de nouvelles cellules, d'ajouter dynamiquement la taille des cellules, de redimensionnement des cellules, etc... et les tables de tous les faire défiler correctement le haut et vers le bas tout le contenu.

Ce problème est en train de se passer sur un couple de tableview que j'ai ajouté récemment.

::EDIT::

OK, il suffit de faire un peu de débogage. Quand j'ai d'abord aller dans la Vue de Table de la contentSize.la hauteur est de 594.

Quand je puis ajouter un nouvel élément et de retourner dans le même tableviewController la contentSize.la hauteur est de 749.

Cependant, je ne peux pas faire défiler pour voir la nouvelle cellule en bas de la tableView. Il a juste l'habitude de défilement là. Il rebondit à l'ancienne contentSize hauteur.

  • Si vous fournissez la bonne hauteur pour les cellules de heightForRow:atIndexPath: il devrait être ok. Êtes-vous mise à jour de la hauteur lorsque la cellule est censé être plus grand?
  • Je n'ai jamais nécessaire de modifier la contentsize lors de l'ajout de cellules. Quelles méthodes utilisez-vous? InsertRow? Pouvez-vous montrer un peu de code?
  • Ouais, je suis réglage de la hauteur bien que la réelle de la cellule devient plus grande. Mais le fond de la tableview ne pas faire défiler par la quantité que la cellule de s'agrandir. c'est à dire si la cellule reçoit 50 points de plus que je ne peux pas défiler pour voir le bas de 50 points de la cellule. Aussi, la table où je suis en ajoutant de nouvelles cellules, toutes les cellules sont de la même taille, un peu plus d'eux. (comme un maître de détail du modèle, de la table de maître vue a un bouton + pour pousser à un contrôleur de créer un nouvel item qui est ensuite affichée dans le master) la nouvelle cellule est là, mais le défilement de la vue rebondit donc je ne peux pas le voir.
  • ajouter un peu de code
  • Si un contentSize valeur est droit et le support de table est à droite, alors peut-être contentInset est la raison?
  • Vérifier tableView:heightForRowAtIndexPath:, dans mon cas, cette méthode a été le retour des valeurs négatives.

InformationsquelleAutor Fogmeister | 2012-11-01