tableview的header和footer取消懸停或者是粘滯,網上找的有效方法是用spa
-(void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.tag == 100102) { UITableView *tableview = (UITableView *)scrollView; CGFloat sectionHeaderHeight = 20; CGFloat sectionFooterHeight = 20; CGFloat offsetY = tableview.contentOffset.y; if (offsetY >= 0 && offsetY <= sectionHeaderHeight) { tableview.contentInset = UIEdgeInsetsMake(-offsetY, 0, -sectionFooterHeight, 0); }else if (offsetY >= sectionHeaderHeight && offsetY <= tableview.contentSize.height - tableview.frame.size.height - sectionFooterHeight) { tableview.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, -sectionFooterHeight, 0); }else if (offsetY >= tableview.contentSize.height - tableview.frame.size.height - sectionFooterHeight && offsetY <= tableview.contentSize.height - tableview.frame.size.height) { tableview.contentInset = UIEdgeInsetsMake(-offsetY, 0, -(tableview.contentSize.height - tableview.frame.size.height - sectionFooterHeight), 0); } } }
但有個問題,如有下拉刷新,那麼整個tableview的樣式會發生改變。由於下拉刷新也是靠contentInset設置。
簡單的方法是設置tableview的style爲UITableViewStyleGrouped。這樣接解決了懸浮問題。但又會引起新問題,默認下section之間的間距很大,僅僅單獨設置header或footer的高度是不行的。顯示效果的各個section間距實際上是section頭部和底部的組合。因此得組合設置纔有效果code
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 0.01f; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 1)]; view.backgroundColor = [UIColor clearColor]; return view; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 10; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 1)]; view.backgroundColor = [UIColor clearColor]; return view; }