我正在尝试设置一个表格视图,我可以上下移动行。 当移动单元格时,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的信息,尽管这不会在其他委托调用中弹出。
答案 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];
}