如何在UITableView可视区域之上添加一个UIView?

8
我知道有tableHeaderView属性,但是当我把自定义的视图添加到其中时,它并没有被隐藏在滚动区域之上。
我希望的效果是,在下拉表格视图并保持下拉时,可以看到我的自定义视图。这在很多应用程序中都会使用,用于放置标志或类似物品,稍微隐藏一下,直到用户下拉表格视图(Twitter/Facebook在下拉时)。
目前我正在使用以下代码,但它并没有将视图放出视野之外:
    UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
    l.text = @"Hidden Text";
    l.textColor = [UIColor redColor];
    self.tableView.tableHeaderView = l;
    [l release];
4个回答

13

由于UITableView实际上是UIScrollView并具有一些额外功能,因此您可以使用contentInset来获得所需的效果。诀窍是为顶部插入使用负值。这通常会隐藏您的标题视图,但当表格反弹时它仍然可见。

因此,在将标签添加到标题视图后,只需设置contentInset如下:


    UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
    l.text = @"Hidden Text";
    l.textColor = [UIColor redColor];
    self.tableView.tableHeaderView = l;

    //add this
    [self.tableView setContentInset:UIEdgeInsetsMake(-l.bounds.size.height, 0.0f, 0.0f, 0.0f)];

    [l release];

1
最佳解决方案是将您的视图添加到标题中,就像您所尝试的那样,然后在控制器的viewDidLoad中以编程方式向下滚动tableview直到您想要隐藏的标题视图被隐藏。 这可以通过多种不同的方式完成。 最简单的方法可能是:
[self.tableView setContentOffset: CGPointMake(0, myHeaderHeight)];

这个解决方案的问题是一旦它被展示出来,它就不会弹回去再次隐藏起来。我希望它只在tableview被下拉时才显现,当他们松开手指时,它会反弹回去以隐藏UIView。 - Nic Hubbard
请注意,在 viewDidLoad 中设置 contentOffset 是没有效果的。你可以在 viewWillAppear: 中设置偏移量。 - Palimondo

0
UIWindow* window = [[UIApplication sharedApplication].delegate.window;
[window addSubview: your-overlayview];

0

只需创建一个高度为0的标题视图,然后将其子视图定位为负y,并使子视图的底部边缘成为视图的顶部。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接