我有一个UITableView
我可以很容易地添加标题视图。许多应用程序(如Facebook,用于查看事件)都有一个headerView,当你下拉时,标题视图保持不变,但表格的其余部分(UITableViewCell
)正在反弹。向上滚动标题消失。我怎样才能实现这个功能?
现在当我下拉UITableView
时,即使是headerView也会反弹
答案 0 :(得分:35)
通过向标题视图添加子视图并在表格视图滚动到顶部以外调整其frame
或transform
,即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
属性