防止显示UITableView标头

时间:2009-10-27 15:48:59

标签: iphone cocoa-touch uitableview

我的iPhone应用程序中的一个屏幕是UITableView,在表头中有一个搜索栏。我希望隐藏搜索栏,直到用户将其拉下来,所以我在viewDidLoad方法中使用这一行:

[self.tableView setContentOffset:CGPointMake(0,40) animated:NO];

这样可以正确显示tableView,并在屏幕顶​​部滚动标题。

当我尝试使用此方法删除行时出现问题:

[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:myIndexPath] withRowAnimation:UITableViewRowAnimationRight];

当该行执行时,它会正确地将行滑出屏幕右侧。但是,如果表只包含几行,则表格标题(带有我的搜索栏)向下滚动以填充新删除的行释放的空间。我不希望这种情况发生。我希望标题保持隐藏,直到用户用手指向下滚动它。

如果tableView有足够的线条填充窗口,则表格从底部填满,标题保持隐藏状态。仅当屏幕未完全填满行时才会出现此问题。

关于如何在删除行时强制UITableView不显示表头的任何想法?


附录:我发现当我使用以下代码将UITableViewController置于编辑模式时会发生同样的事情:

[self setEditing:NO animated:YES];  

进入编辑模式,显示红色的“删除行”圆圈,并显示表格标题。也许它与动画有关。

4 个答案:

答案 0 :(得分:1)

这是在不久前发布的,但我最近遇到了同样的问题。 deleteRowsAtIndexPaths解决后重复setContentOffset。

答案 1 :(得分:0)

你的行是固定的高度吗?也许您可以检测剩余的行数,并在删除时重置偏移量。

答案 2 :(得分:0)

尝试使用tableView上的UIScrollViewDelegate调用- (void)scrollViewDidScroll:(UIScrollView *)scrollView进行收听。如果contentOffset在您不希望的情况下变得小于40,请停止滚动。

答案 3 :(得分:0)

我找到的唯一好的解决方案如下:将页脚视图添加到初始高度为1像素的表格中(使用(0,0,320,1)帧分配UIView)。

每当数据发生变化或视图高度发生变化时(使用UIViewController的iOs的viewWillLayoutSubviews方法&gt; = 5.0),您都可以调用update_footer方法。在此方法中,您计算​​节的数量和行数,然后通过将这些数据乘以行高和节分隔符高度来计算数据的高度。现在页脚高度是tableview高度减去计算出的数据高度(如果它是<1像素,则将其设置为1)。

将页脚的框架设置为(0,0,320,即该高度),并且不要忘记再次将页脚视图指定给表格的页脚属性(table.FooterView = table.FooterView :))以告诉表格页脚的高度改变了。

对不起,我没有提供任何代码,我现在使用Xamarin工作室(以前的单声道触摸)并用C#编写。

顺便说一句,如果您想要自定义单元格分隔符图像(包括不存在的单元格之间的图像),则可以使用此方法。 :)