我的应用程序中的几个表格 View 有问题。
当表的内容更改时(因此表 View 的内容变大),就会发生问题。
由于某种原因,UITableView的contentSize保持不变,这意味着我无法滚动以查看新内容。
当特定单元格变大时(在[tableView reloadData]之后),或者当我添加新单元格时(使用NSFetchedResultsController委托(delegate)方法),就会发生这种情况。
我需要做些什么来使tableView重新调整其contentSize吗?
编辑以显示代码,但这只是样板NSFetchedResultsController委托(delegate)代码...
- (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,它们都工作正常。我可以添加新的单元格,动态调整大小的单元格,调整单元格的大小等,然后表格在所有内容上都可以正常滚动。
我最近添加了几个表 View ,现在正在发生此问题。
::编辑::
好的,只需进行一些调试即可。当我第一次进入表格 View 时,contentSize.height为594。
然后,当我添加一个新项并返回相同的tableviewController时,contentSize.height为749。
但是,我无法滚动以查看tableView底部的新添加的单元格。它只是不会滚动到那里。它以旧的contentSize高度反弹。
最佳答案
我一直遇到同样的问题,并最终解决了这个问题。我要在contentSize
之后设置[self.tableView endUpdates];
[self.tableView endUpdates];
NSLog(@"%f", self.tableView.contentSize.height);
self.tableView.contentSize = [self.tableView sizeThatFits:CGSizeMake(CGRectGetWidth(self.tableView.bounds), CGFLOAT_MAX)];
NSLog(@"%f", self.tableView.contentSize.height);
[self.tableView setContentInset:UIEdgeInsetsMake(50, 0, -50, 0)];
关于iphone - UITableView contentSize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13181607/