アプリのいくつかのテーブルビューに問題があります。
この問題は、テーブルの内容が変更されたときに発生します(したがって、テーブルビューの内容が大きくなります)。
何らかの理由で、UITableViewのcontentSizeは同じままです。つまり、スクロールして新しいコンテンツを表示することはできません。
これは、特定のセルが大きくなったとき([tableView reloadData];の後)、または新しいセルを追加したとき(NSFetchedResultsControllerデリゲートメソッドを使用)に発生します。
tableViewがcontentSizeを再調整するために必要なことはありますか?
コードを表示するように編集しますが、これは単なる定型的なNSFetchedResultsControllerデリゲートコードです...
- (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];
}
私は以前iOS5でこの種のことをしたことがあり、問題はありませんでした。これはiOS6の変更である可能性がありますか?
::編集::
これについての愚かなことは、同じアプリに他のUITableViewControllerがいくつかあり、それらはすべて正常に機能していることです。新しいセルを追加したり、動的なサイズのセルを追加したり、セルのサイズを変更したりできます。テーブルはすべて、すべてのコンテンツを上下に正しくスクロールします。
この問題は、最近追加したいくつかのテーブルビューで発生しています。
::編集::
OK、デバッグを行うだけです。最初にテーブルビューに移動したとき、contentSize.heightは594です。
次に、新しいアイテムを追加して同じtableviewControllerに戻ると、contentSize.heightは749です。
ただし、スクロールしてtableViewの下部に新しく追加されたセルを表示することはできません。そこをスクロールしません。古いcontentSizeの高さでバウンスします。