我想在我的桌子顶部有一个大视野。这提供了像搜索栏一样的搜索参数,但有更多选项……因此,占用了更多空间。(假设是 100 像素。)
当我滚动它时,我希望它不会消失,而只是简化。(假设是 44 像素。)它不是可编辑的字段,而是搜索的摘要。点击该摘要将滚动回顶部,再次将搜索视图扩展到其完整大小。
我该怎么做?
我想在我的桌子顶部有一个大视野。这提供了像搜索栏一样的搜索参数,但有更多选项……因此,占用了更多空间。(假设是 100 像素。)
当我滚动它时,我希望它不会消失,而只是简化。(假设是 44 像素。)它不是可编辑的字段,而是搜索的摘要。点击该摘要将滚动回顶部,再次将搜索视图扩展到其完整大小。
我该怎么做?
第一步是您的标题不应该是您的一部分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];
}
}
希望这可以帮助 :)