【问题标题】:How can I add a UIView above viewable area of a UITableView?如何在 UITableView 的可视区域上方添加 UIView?
【发布时间】:2011-02-28 23:38:07
【问题描述】:

我知道有一个 tableHeaderView 属性,但是当我将视图添加到该属性时,它并没有隐藏在滚动区域上方。

我想要的是,当您拉下 tableview 并按住并看到我的 UIView 时显示我的自定义视图。在许多应用程序上都会这样做,以将徽标或类似的东西稍微隐藏起来,直到用户在 tableview 上下拉(下拉时为 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];

【问题讨论】:

    标签: iphone ios uitableview sdk


    【解决方案1】:

    由于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];
    

    【讨论】:

    • 完美!这正是我一直在寻找的。非常感谢!
    【解决方案2】:

    这里最好的解决方案是将您的视图添加到标题中,正如您所提到的您尝试过的那样,然后在控制器的 viewDidLoad 中实际上以编程方式向下滚动表格视图,直到您想要隐藏的标题视图被隐藏。这可以通过多种不同的方式来完成。最简单的可能是:

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

    【讨论】:

    • 这个解决方案的问题是一旦显示它就不会弹回来再次隐藏它。我希望它只有在拉下 tableview 时才松了一口气,当他们松开手指时,它会弹回来隐藏 UIView。
    • 请注意,在viewDidLoad 中设置contentOffset 无效。例如,您可以在viewWillAppear: 中设置偏移量。
    【解决方案3】:

    只需有一个高度为 0 的标题视图,然后将其子视图定位为负 y,这样子视图的底部边缘就是视图的顶部。

    【讨论】:

      【解决方案4】:
      UIWindow* window = [[UIApplication sharedApplication].delegate.window;
      [window addSubview: your-overlayview];
      

      【讨论】:

        猜你喜欢
        • 2016-02-04
        • 2017-01-16
        • 2015-03-05
        • 2016-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-09
        相关资源
        最近更新 更多