【问题标题】:Preventing Display of UITableView header防止显示 UITableView 标头
【发布时间】:2009-10-27 15:48:59
【问题描述】:

我的 iPhone 应用程序中的一个屏幕是 UITableView,它在表头中有一个搜索栏。我希望在用户将其拉下之前隐藏搜索栏,因此我在 viewDidLoad 方法中使用了这一行:

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

这会正确显示表格视图,其中标题从屏幕顶部滚动出来。

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

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

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

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

知道如何在删除行时强制 UITableView 不显示表头吗?


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

[self setEditing:NO animated:YES];  

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

【问题讨论】:

    标签: iphone cocoa-touch uitableview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          每当您的数据发生变化或视图高度发生变化(使用 UIViewController 的 viewWillLayoutSubviews 方法用于 iO >=5.0)时,您都会调用 update_footer 方法。在此方法中,您计算​​节数和行数,然后通过将它们乘以行高和节分隔符高度来计算数据的高度。现在页脚高度是 tableview 高度减去计算的数据高度(如果它

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

          很抱歉我没有提供代码,我现在使用 Xamarin studio(以前的 mono touch)并用 C# 编写。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-04
            • 1970-01-01
            • 2017-01-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多