3

このビデオを見てください。

このコードを実行すると、この不具合が発生します。

[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;
}
4

1 に答える 1

0

ご存知のように、-beginUpdatesand-endUpdatesreloadと組み合わせて使用​​するのではなく、挿入または削除するときに使用してください。

これが問題を引き起こしているかどうかはわかりませんが、チェックする価値があるかもしれません.

アニメの種類に関係なく同じですか?

Appleのドキュメントから:

後続の挿入、削除、および選択操作 (cellForRowAtIndexPath: および indexPathsForVisibleRows など) を同時にアニメーション化する場合は、このメソッドを呼び出します。このメソッドのグループは、endUpdates の呼び出しで終了する必要があります。これらのメソッドのペアはネストできます。このブロック内で挿入、削除、および選択の呼び出しを行わないと、行数などのテーブル属性が無効になる可能性があります。グループ内で reloadData を呼び出さないでください。グループ内でこのメソッドを呼び出す場合は、自分でアニメーションを実行する必要があります

于 2013-05-23T19:52:42.650 に答える