我有一个UITableView中的部分设置,它们都有自定义部分标题视图。一次只有一个部分可以有可见的行。
要创建显示其他单元格行的效果,我基本上使用以下函数:
[self.tableView beginUpdates];
if ( sectionHeaderInsert >= 0 && sectionHeaderInsert <= numberOfSectionsInTableView ) {
[ticketReastepsScreenView.tableView insertRowsAtIndexPaths:indexPathsInsert withRowAnimation:UITableViewRowAnimationFade];
}
[self updateTmpSelectedNumberToCurrent];
if ( sectionHeaderRemove >= 0 && sectionHeaderRemove <= numberOfSectionsInTableView ) {
[ticketReastepsScreenView.tableView deleteRowsAtIndexPaths:indexPathsRemove withRowAnimation:UITableViewRowAnimationFade];
}
[self.tableView endUpdates];
现在发生的事情是,最后新部分“打开”并且旧部分“正常”关闭,但是:如果我有更多适合屏幕的部分,那么(部分)可见的最后部分将不会重新绘制适当地 - 它完全被白色覆盖。
所有部分都被问到了新的高度,我认为它甚至要求新的视图(我在一个数组中)。然后要求视图[查看setNeedsDisplay];
当我滚动一下以使最后一个部分标题消失然后再将其滚回时,它会再次生效并且可见,直到我再次更改当前打开的部分。
UPD :只有当我一起执行insertRow和deleteRow时才会出现这种有趣的行为。我也可以简单地关闭一个部分(deleteRow)然后在一个部分触摸操作打开新的部分(insertRow),行为是不同的。
我还尝试在两个操作之间使用endUpdates和beginUpdates - 没有正面结果。
UPD2 :当转换到最终位置(位置很好)时,我可以看到最后一个部分标题被正确绘制,但随后消失(没有动画,简单的白色就可以了)
答案 0 :(得分:0)
无论真正的问题是什么 - 我重写了TableView的重要部分,我认为我所学到的是:
如果您需要UITableViewCell,请使用UITableViewCell。如果您需要UIView作为节标题,请使用UIView作为节标题。
我已将节标题与TableViewCells混合,只是为了重用我在那里的一些代码。由于类别只能扩展一个特定的类,我必须使用委托/提供者方法/对象来重用某些代码。它可能需要更多的子类化,但实际上更安全。
此外,自动滚动到某个位置现在效果更好,绘图工件也消失了。