我的应用程序中的几个表格 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/

10-12 06:13