重新排序后,uitableview中的单元格在滚动时位于customheaderviews之上

时间:2012-10-26 18:11:22

标签: uitableview scroll

我创建了一个UITableViewController。在其中,我创建了一个自定义视图,从viewForHeaderInSection返回标头。如果我进入编辑模式并重新排序单元格,则重新排序的单元格在滚动期间浮动在自定义标题视图上方。这将继续,直到使用[tableview reload]重新加载tableview。它就好像从重新排序中删除后,单元格被移动到视图堆栈的顶部。

我已经在moveRowAtIndexPath方法结束时解决了[tableView reload]的问题,但我想知道这是否是预期的行为。我无法在文档或谷歌搜索中找到任何相关内容。

2 个答案:

答案 0 :(得分:3)

我认为这是UITableView中的一个错误。如果在moveRowAtIndexPath方法期间检查表的视图层次结构,则可以看到有问题的单元格位于层次结构的顶部附近 - 这是为了支持在拖动单元格时的外观。

您不能简单地将视图移动到此方法的层次结构的后面,因为它在其上有一个动画,它似乎覆盖了它。

我不习惯在数据更新方法中重新加载行,因此我的解决方案是包含此代码:

UITableViewCell *movedCell = [tableView cellForRowAtIndexPath:fromIndexPath];
double delayInSeconds = 0.4;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [tableView sendSubviewToBack:movedCell];
});

0.4秒的延迟是在动画时间上完成动画。

雷达:http://openradar.appspot.com/radar?id=2681402

答案 1 :(得分:0)

这是标题视图中的自动调整标记。在xib中删除它们。