16

我有一个UITableView可以很容易地添加标题视图的方法。许多应用程序(如 Facebook,用于查看事件)都有一个 headerView,当您下拉时,标题视图保持不变,但表格的其余部分(UITableViewCell's)正在弹跳。向上滚动时,标题消失。我怎样才能实现这个功能?

现在,当我拉下 时UITableView,甚至 headerView 也会弹跳

4

3 回答 3

37

您可以通过向标题视图添加子视图并调整其frametransform当表格视图滚动超出顶部时非常容易地实现此效果,即其y组件contentOffset变为负数。

示例(在UITableViewController子类中):

- (void)viewDidLoad
{
    [super viewDidLoad];
    CGFloat headerHeight = 64.0f;
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, headerHeight)];
    UIView *headerContentView = [[UIView alloc] initWithFrame:headerView.bounds];
    headerContentView.backgroundColor = [UIColor greenColor];
    headerContentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [headerView addSubview:headerContentView];
    self.tableView.tableHeaderView = headerView;
}

//Note: UITableView is a subclass of UIScrollView, so we
//      can use UIScrollViewDelegate methods.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat offsetY = scrollView.contentOffset.y;
    UIView *headerContentView = self.tableView.tableHeaderView.subviews[0];
    headerContentView.transform = CGAffineTransformMakeTranslation(0, MIN(offsetY, 0));
}

(为了简单起见,我刚刚使用了实际标题视图的第一个子视图scrollViewDidScroll:,您可能希望使用一个属性来代替。)

于 2013-05-16T18:17:56.790 回答
0

UITableView很可能工作正常。默认情况下,节标题在普通样式表中是粘性的。这意味着当您向下滚动标题时,标题将停留在UITableView' 框架的顶部,直到下一个部分标题将其推开。向上滚动时会发生相反的情况。UITableView相反,您会在's 框架底部的部分页脚上获得粘性行为。

编辑误解了原来的问题:

我建议使用部分标题而不是表格视图标题来获得您正在寻找的粘性行为。

在数据中包含一个没有行的部分,并将表格标题的视图放在该部分标题视图中。

于 2013-05-16T16:25:41.173 回答
-1

有两种方法可以设置表头:

  • 直接使用.tableHeaderView属性(此标题随表格滚动)

  • 覆盖- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section函数(此标头与该部分保持静态)

听上去你应该使用第二种方法而不是使用.tableHeaderView属性

于 2013-05-16T16:03:57.293 回答