滚动时收缩的标题视图

时间:2013-10-29 17:15:04

标签: ios uitableview

我想要在我的桌子顶部看一个大视图。这提供了搜索参数,如搜索栏,但有更多选项......因此,占用更多空间。 (比方说100像素。)

当我滚动它时,我希望它消失但只是简化。 (比方说44像素。)而不是可编辑的字段,它将成为搜索的摘要。点击该摘要将滚动回到顶部,再次将搜索视图扩展到其完整大小。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

第一步是您的标题不应该是UITableView的一部分,而是添加到同一级别。

[self.view addSubview:self.tableView];
[self.view addSubview:self.myHeaderView];

要使表格正常运行,只需在表格(tableView.tableHeaderView)上放置一个与您需要的视图大小相同的空标题。

UIView *emptyHeader = [[UIView alloc] initWithFrame:self.myHeaderView.bounds];
self.tableView.tableHeaderView = emptyHeader;

此外,由于自定义标头的行为是动态的,因此您必须创建UIView子类并在那里管理标头。

UITableViewDelegate实施scrollViewDidScroll,并在每次调用时检查contentOffset。

假设您的展开视图的高度为100,合同时为44:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y > (100 - 44)) {
        // Contract your header
        myHeaderView.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
        [myHeaderView contract]; // Make it display whatever data you want and setup the touch gesture
    }
    else {
        int offset = scrollView.contentOffset.y;
        // The reason for the -offset is that you need it to align to the table's real header position, which will be a little off screen
        myHeaderView.frame = CGRectMake(0, -offset, self.view.frame.size.width, 100);
        [myHeaderView expand];
    }
}

希望这会有所帮助:)