Ein Problem mit ein paar Tabellenansichten in meiner App.UITableView contentSize
Das Problem tritt auf, wenn sich der Inhalt der Tabelle ändert (und daher der Inhalt der Tabellenansicht größer wird).
Aus irgendeinem Grund behält die contentSize des UITableView die gleiche Bedeutung Ich kann nicht scrollen, um den neuen Inhalt zu sehen.
Dies geschieht entweder, wenn eine bestimmte Zelle größer wird (nach einem [TableView ReloadData];) oder wenn ich neue Zellen (mit den Delegate-Methoden NSFetchedResultsController) hinzufügen.
Gibt es etwas, was ich tun muss, damit TableView seine contentSize nachjustiert?
bearbeiten Code zu erhalten, aber das ist nur vorformulierten NSFetchedResultsController Delegierten 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];
}
Ich habe diese Art der Sache getan, bevor sie in iOS5 und nie ein Problem mit ihm hatte. Scheint das eine iOS6 Änderung?
:: EDIT ::
Das dumme daran ist, dass ich eine Reihe von anderen UITableViewControllers in der gleichen App haben und sie arbeiten alle in Ordnung. Ich kann neue Zellen hinzufügen, dynamisch große Zellen hinzufügen, die Größe von Zellen ändern usw., und die Tabellen scrollen alle ganz nach oben und unten durch den gesamten Inhalt.
Dieses Problem tritt jetzt bei einigen Tabellenansichten auf, die ich kürzlich hinzugefügt habe.
:: EDIT ::
OK, tun nur einige Debug. Als ich zum ersten Mal in die Tabelle gehen Sehen Sie die contentSize.height 594. ist
Wenn ich ein neues Element dann hinzufügen und in die gleichen Tableviewcontroller zurück die contentSize.height 749.
, kann ich jedoch nicht Blättern Sie, um die neu hinzugefügte Zelle am unteren Rand der Tabelle anzuzeigen. Es wird einfach nicht dort blättern. Es springt auf die alte contentSize Höhe.
Wenn Sie die richtige Höhe für die Zellen in 'heightForRow bieten: atIndexPath:' es in Ordnung sein sollte. Aktualisieren Sie die Höhe, wenn die Zelle größer werden soll? –
Ich brauchte nie die Inhaltsgröße beim Hinzufügen von Zellen ändern. Welche Methoden verwendest du? InsertRow? Kannst du etwas Code zeigen? –
Ja, ich stelle die Höhe richtig ein, wenn die tatsächliche Zelle größer wird. Der untere Teil der Tabellenansicht scrollt jedoch nicht um den Betrag, um den die Zelle größer wurde. Wenn die Zelle 50 Punkte größer wird, kann ich nicht scrollen, um die unteren 50 Punkte der Zelle zu sehen. Auch die Tabelle, in der ich neue Zellen hinzufüge, alle Zellen haben die gleiche Größe, nur mehr von ihnen. (Wie ein Masterdetailmodell hat die Haupttabellenansicht eine + Schaltfläche, um einen Controller zu einem neuen Element zu bringen, das dann im Master angezeigt wird.) Die neue Zelle ist dort, aber die Bildlaufansicht springt, so dass ich sie nicht sehen kann. – Fogmeister