最近项目中有个地方需要用到去掉tableView组头的粘滞性的需求,于是楼主就开始google解决这个问题了,首先找到了一个代码段如下:
- (void)scrollViewDidScroll:(UIScrollView )scrollView{
/* 修改成自己的组头高度就可以了 /
CGFloat sectionHeight = self.height;
if (scrollView == self.tableView) {
if (scrollView.contentOffset.y <= sectionHeight && scrollView.contentOffset.y >= 0)`
{
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
}else{
if(scrollView.contentOffset.y >= sectionHeight)
{
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeight, 0, 0, 0);
}
}
}
}
这是在网上能找到的最多的关于去掉UITableView的组头的方式,但是这段代码在我的项目中使用的时候出了点问题,楼主需要实现的是一个有表头视图且第一个分组没有组头视图的tableView的展示,在使用时出现了在大于一个分组的时候,有时候向上只能拖动sectionHeight的高度,然后tableView就死活滑不上去了,但是,但是,但是,在楼主之前的demo中是没有任何问题的,
返回组头和组尾视图的代理方法
- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; // custom view for header. will be adjusted to default or specified header height
- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section; // custom view for footer. will be adjusted to default or specified footer height
返回组头和组尾视图高度的代理方法
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
我们只需要在上面代理方法中返回我们需要显示的组头视图或者组尾视图就可以了,就可以不用实现scrollViewDidScroll的代理方法来实现取消组头或者组尾视图的粘滞性了,因为Grouped方式的tableView默认组头和组尾视图随着tableView一起向上移动的,到此楼主所需的功能已经实现取消组头的粘滞性的需求,且没有实现UIScrollow的那个代理方法。
Demo地址:https://github.com/PSSDeveloper/bugDemo/tree/master
最后总结一下:实现取消组头或者组尾的粘滞性的需求时,可以先考虑使用Grouped方式的tableView,并通过系统的代理方法设置组头或者组尾视图,和组头和组尾的高度。