重新加载上面的部分时,UITableView部分标题中出现奇怪的故障

时间:2013-05-23 15:26:05

标签: iphone ios objective-c uitableview

查看this video

运行此代码时出现这个问题:

[NSFetchedResultsController deleteCacheWithName:@"Root"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"following == YES"];
[self.fetchedResultsController.fetchRequ­est setPredicate:predicate];
[self.fetchedResultsController performFetch:nil];
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:THE_SECTION_WITH_THE_B­LOGS] withRowAnimation:UITableViewRowAnimation­Automatic];
[self.tableView endUpdates];

为什么我重新加载的部分下方的部分标题会像这样改变它的框架?任何解决方案?

编辑:

这是我的viewForHeaderInSection:

(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if (tableView != self.tableView)
return nil;
BLMenuTableSectionHeaderView *view = nil;

if (section != BLMenuSectionUser) {
    view = [[BLMenuTableSectionHeaderView alloc] initWithFrame:CGRectZero];
    if (section == BLMenuSectionFollowing){
        if ([self blogCount] > 0){
            [view setTitle:NSLocalizedString(@"Following", nil)];
            [view addSubview:self.editButton];
        }else{
            self.tableView.editing = NO;
        }
    }
    if (section == BLMenuSectionPosts){
        [view setTitle:NSLocalizedString(@"Browse", nil)];
    }
    else if (section == BLMenuSectionSettings)
        [view setTitle:NSLocalizedString(@"Settings", nil)];
}

return view;
}

1 个答案:

答案 0 :(得分:0)

Afaik,您不应将-beginUpdates-endUpdates重新加载结合使用,而应使用when inserting or deleting

不确定这是否会导致您的问题,但可能值得一试。

无论动画类型如何都一样吗?

来自Apple's docs

  

如果您想要后续插入,删除和,请调用此方法   选择操作(例如,cellForRowAtIndexPath:和   indexPathsForVisibleRows)同时进行动画处理。这一组   方法必须以调用endUpdates结束。这些方法   对可以嵌套。如果您不进行插入,删除和   选择调用此块内部,表属性如行计数   可能会变得无效。 您不应该在组内调用reloadData;   如果您在组内调用此方法,则需要执行任何操作   自己制作动画