昨天在項(xiàng)目中遇到一個(gè)關(guān)于tableView的headerView不能隨著cell一起滾動(dòng),必須要下一組headerView才能頂上去的問題.
百度上也有很多人遇到這個(gè)問題 解決的方式大部分都是監(jiān)聽滾動(dòng):?
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat sectionHeaderHeight = 50;
if (scrollView.contentOffset.y <= sectionHeaderHeight && scrollView.contentOffset.y> 0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
}else
if(scrollView.contentOffset.y >= sectionHeaderHeight){
? ? ? scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
? ? ?}
}
這個(gè)方法我也測(cè)試了下有BUG 滾動(dòng)的時(shí)候不流暢headerView會(huì)閃一下并且如果你的tableview的cell鋪不滿整個(gè)屏幕的時(shí)候有彈簧效果的時(shí)候滑上去之后就下不來了,苦惱很久突然想到以前也寫過一個(gè)這種分組的tableView,記得不會(huì)出現(xiàn)這個(gè)問題的,代碼是這樣寫的:
self.switchTableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStyleGrouped];
[self.view addSubview:self.switchTableView];
現(xiàn)在的項(xiàng)目是用masonry寫約束的所以創(chuàng)建tableView的時(shí)候沒有用到initWithFrame: style:這個(gè)方法:
self.memberTableView = [[UITableView alloc]init];
但是用initWithFrame: style:這個(gè)創(chuàng)建方法必須要傳個(gè)frame怎么辦?其實(shí)很簡(jiǎn)單傳個(gè)CGRectZero就好了 代碼如下:
self.memberTableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
[self.view addSubview:self.memberTableView];
[self.memberTableView mas_makeConstraints:^(MASConstraintMaker *make) {
? ? ? make.edges.mas_equalTo(self.view);
}];
但是這個(gè)方法會(huì)在每一組的頭部加上一個(gè)空白組頭部和底部所以必須再實(shí)現(xiàn)一個(gè)方法
self.memberTableView.tableHeaderView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGFLOAT_MIN, CGFLOAT_MIN)];
self.memberTableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGFLOAT_MIN, CGFLOAT_MIN)];
同時(shí)這個(gè)方法也會(huì)當(dāng)tableView占不滿一屏?xí)r,去除下邊多余的單元格
如果你的tableview沒有footView的時(shí)候最好把高度寫成0.001.
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return 0.001;
}
所以只要確定創(chuàng)建的tableView的樣式是UITableViewStyleGrouped 然后將footView的時(shí)候最好把高度寫成0.001 tableHeaderView,tableFooterView改成最小 ? headerView滑動(dòng)的時(shí)候就不會(huì)卡在頂部了.
希望下次有遇到跟我一樣的問題的人,少走點(diǎn)彎路.