2012-10-26 125 views
3

我创建了一个UITableViewController。在它内部,我创建了一个从viewForHeaderInSection返回头部的自定义视图。如果我进入编辑模式并对单元格重新排序,那么在滚动期间,重新排序的单元格浮动在自定义标题视图上方。这将持续到tableview用[tableview reload]重新加载。就好像单元格从重新排序中被移动到视图堆栈顶部之后一样。重新排序后,uitableview中的单元格在滚动时位于customheaderviews之上

我在moveRowAtIndexPath方法的末尾找到了[tableView reload]的问题,但我想知道这是否是预期的行为。我无法在文档或Google搜索中找到任何有关它的信息。

回答

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秒的延迟是给动画发生在细胞的时间完成。

Radar'd:http://openradar.appspot.com/radar?id=2681402

+0

是的,[tableview reload]当时没有和我一起坐好。我更喜欢你的方法。 – Ajaxharg

+0

我发现,拖延是不够的相当长的设备上 - 你可能希望测试后进行调整。 – jrturton

0

这是对你的标题视图中的自动调整大小的标志。在xib中移除它们。

相关问题