我有一个带有一些部分的UITableView,每个部分都有自己的标题视图。 当用户点击某个部分的标题视图时,该部分的所有行都将折叠。我所做的是,我将该部分的行数设置为0,然后调用:
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom];
一切都按预期工作,除了一件事:该部分的标题视图变为白色空白。当我滚动表格时,标题再次变为正常。
所以我觉得桌子的绘图存在一些问题。
有趣的是,如果我使用UITableViewRowAnimationFade代替,那么即使我滚动表格,标题仍然是白色空白。
当我只更新一个部分时也没有问题 - 当我更新多个部分时会出现问题。
如果我使用
[self.tableView reloadData]
相反,一切正常。
我使用的原因
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom];
是因为我想要动画。
使用beginUpdates / endupdates进行包装不起作用。
答案 0 :(得分:44)
我意识到自提出这个问题以来已经很长时间了,但我认为下面给出的所有答案都是错误的。
我遇到了同样的问题(和其他人的代码一样),并且当我意识到代码没有正确地重用表头时,这篇文章即将被这个帖子所迷惑。标题消失是因为代码只提供了UIView,而不是UITableViewHeaderFooterView,正确注册并设置为可重用。
看看这里的答案: How to use UITableViewHeaderFooterView?
当我设置一个可重复使用的标题时,我的空白标题就消失了。
答案 1 :(得分:1)
我找到了一种解决方法 - 不是很优雅,但它有效。 我没有提供带有多个节的NSIndexSet,而是在for循环中调用reloadSections,每次调用只有一个节。
看起来像:
for (Element *eleSection in self.gruppenKoepfe) {
if ( eleSection.type.integerValue == qmObjectTypeFormularSpalte || eleSection.type.integerValue == qmObjectTypeFormularZeile ) {
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:nCount] withRowAnimation:UITableViewRowAnimationFade];
}
nCount ++;
}
答案 2 :(得分:1)
在斯威夫特:
您需要创建一个类UITableViewHeaderFooterView
的子类,并将其注册到表视图中。然后在viewForHeaderInSection
中,执行let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as! YourHeaderView
,类似于您对UITableViewCells所做的操作。然后返回header
。
欺骗性的事情是当函数真正需要dequeuedReusableHeaderFooterView或UIView?
将导致它消失时,函数调用reloadData
的返回
答案 3 :(得分:0)
我有一个类似的问题,除了我试图删除/插入部分,我发现保持一个强大的属性指向整个标题视图(即不仅仅是一个子视图)停止它在部分更新期间消失。
e.g。属性和实例化
@property (nonatomic, strong) UIView *headerView;
-(UIView *)headerView {
if ( !_headerView ) {
_headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.bounds.size.width, 300)];
// add additional view setup, including subviews
}
return _headerView;
}
在tableView:(UITableView *)viewForHeaderInSection:(NSInteger)section
:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if ( section == theCorrectSection ) {
return self.headerView;
}
return nil;
}
答案 4 :(得分:0)
我遇到了同样的问题而且没有上述问题。我的问题是我正在隐藏第一个标题,并且出于某种原因,在超过10个重新加载之后,索引2处的标题被设置为隐藏。当我设置headerView.hidden = false时就可以了。