下拉时UITableVIew标题没有弹跳

时间:2013-05-16 14:24:43

标签: objective-c uitableview

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

现在当我下拉UITableView时,即使是headerView也会反弹

3 个答案:

答案 0 :(得分:35)

通过向标题视图添加子视图并在表格视图滚动到顶部以外调整其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:中实际标题视图的第一个子视图,您可能希望使用相应的属性。)

答案 1 :(得分:0)

您的UITableView最有可能正常运作。默认情况下,节样式表中的节标题是粘性的。向下滚动标题的含义停留在UITableView框架的顶部,直到下一个标题标题将其推开。向上滚动时会发生相反的情况。相反,您会在UITableView框架底部的部分页脚上获得粘性行为。

编辑误解了原来的问题:

我建议使用节标题而不是表格标题来获取您正在寻找的粘性行为。

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

答案 2 :(得分:-1)

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

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

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

听起来,你应该使用第二种方法,而不是使用.tableHeaderView属性