【发布时间】:2011-07-19 21:43:42
【问题描述】:
我有一个 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];
现在发生的情况是,最后新部分“打开”而旧部分正确“关闭”,但是:如果我有更多适合屏幕的部分,则(部分)可见的最后一个部分将不会重新绘制恰到好处 - 它完全被白色覆盖。
所有部分都被问到新的高度,我认为它甚至要求新的观点(我在一个数组中)。然后要求视图 [view setNeedsDisplay];
当我稍微滚动一下以使最后一个部分标题消失,然后再将其滚动回来时,它会重新焕发生机并且可见,直到我再次更改当前打开的部分。
UPD:这种有趣的行为只有在我同时执行 insertRow 和 deleteRow 时才会出现。我也可以简单地关闭一个部分(deleteRow),然后在一个部分触摸动作中打开新的部分(insertRow),并且行为不同。
我还尝试在两个操作之间设置 endUpdates 和 beginUpdates - 没有积极的结果。
UPD2:当过渡到最终位置(位置很好)时,我可以看到最后一节标题被正确绘制,但随后消失(没有动画,简单的纯白色)
【问题讨论】:
-
尝试以编程方式将表格视图滚动到打开的部分
-
好主意 - 让它更有用 - 但不能解决问题。我想我在自定义部分标题视图的 layoutSubviews 方法中发现最终更新的大小为 0,0,0,0 - 这将使其不可见。怎么可能?
标签: iphone objective-c uitableview sections