由于标题,proposedDestinationIndexPath错误

时间:2017-02-11 16:58:11

标签: ios objective-c uitableview

我正在尝试设置一个表格视图,我可以上下移动行。 当移动单元格时,tableView中为单元格创建空间的位置看起来大约有2行。

移动单元格时,我通过以下方式记录建议的indexPath:

- (NSIndexPath*) tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
    NSLog(@"%ld", proposedDestinationIndexPath.row);
}

并且记录的行确实是关于我在负2上持有我的单元格的行。

看起来,问题是由具有标题的表视图引起的,这似乎混淆了建议的索引路径的计算。标题在viewDidLoad中添加了固定框架,但我无法计算其高度,因此其大小设置为viewWillLayoutSubviews

- (void)viewWillLayoutSubviews {

    [super viewWillLayoutSubviews];
    //..
    [myHeader setNeedsLayout];
    [myHeader layoutIfNeeded];
    CGRect newFrame = myHeader.frame;
    newFrame.size.height = [self dynamicallyComputeHeight];
    myHeader.frame = newFrame;
}

因此看起来tableView还没有完全更新有关如何从可视位置计算indexPath的信息,尽管这不会在其他委托调用中弹出。

1 个答案:

答案 0 :(得分:1)

尝试重新加载tableView:

- (void)viewWillLayoutSubviews {

    [super viewWillLayoutSubviews];
    // Add a flag to cehck if it has already been updated 
   if (_hasUpdatedHeaderFrame) { return }
    _hasUpdatedHeaderFrame = YES;

    [myHeader setNeedsLayout];
    [myHeader layoutIfNeeded];
    CGRect newFrame = myHeader.frame;
    newFrame.size.height = [self dynamicallyComputeHeight];
    myHeader.frame = newFrame;

    [_tableView reloadData];
}