2011-02-28 59 views
8

我知道有一個tableHeaderView屬性,但是當我添加我的視圖到它時,它不會隱藏在滾動區域之上。如何在UITableView的可視區域上添加UIView?

我想要的是,當您拉下tableview並按住並顯示我的UIView時,顯示的自定義視圖。這是在許多應用程序上完成的,用於放置徽標或稍微隱藏,直到用戶拉下桌面視圖(下拉時爲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]; 

回答

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]; 
+0

完美!這正是我所期待的。非常感謝! – 2011-03-01 18:21:34

1

最好的解決方案是將您的視圖添加到標題,因爲你曾提到你嘗試過,然後在您的控制器的viewDidLoad實際上滾動tableview向下編程,直到你想隱藏的標題視圖被隱藏。這可以通過許多不同的方式來完成。最簡單的大概是:

[self.tableView setContentOffset: CGPointMake(0, myHeaderHeight)]; 
+0

該解決方案的問題是,一旦顯示它將不會彈回來再次隱藏它。我希望它只能在桌面被拉下時釋放,當他們放開手指時,它會反彈回來隱藏UIView。 – 2011-02-28 23:53:50

+0

請注意,在'viewDidLoad'中設置'contentOffset'沒有效果。您可以在'viewWillAppear:'中設置偏移量。 – Palimondo 2011-09-09 06:57:04

0

只要有一個0高度頭視圖,然後有一個子視圖在的位置負y,並且子視圖的底部邊緣是視圖的頂部。

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