需求 如下图 1 ,2 都会随着tableview的滑动而滑动 但 当2滑动至导航栏底就悬浮在导航栏底部。
最开始写着功能的时候 是用把tableView 设置成 plain 样式 将块1 设置成tableViewHeader,块2设置为 section header;
这样确实是可以暂时满足需求。但 数据很多时 tableView 滑动过快 sectionHeader 就会卡顿,与导航栏之间 产生空白区域。
解决的方法 是在tableView滑动过程中 如果块2到达导航栏底部 就将块2 加在self.view上 与 tableView平级离开导航栏底部就加在 tableView上
下面是主要代码
- (void)scrollViewDidScroll:(UIScrollView*)scrollView{
self.selectView.userInteractionEnabled = YES;
CGFloat y =70.0;//块2距导航栏底部的间距
if (self.tableView.contentOffset.y>70) {
y =kNavBarHeight;
[self.viewaddSubview:self.selectView];
[self.view bringSubviewToFront:self.selectView];
self.selectView.frame=CGRectMake(0, y,self.view.current_w,40);
}else{
[self.tableView addSubview:self.selectView];
[self.tableView bringSubviewToFront:self.selectView];
self.selectView.frame = CGRectMake(0, y, self.tableView.current_w, 40);
}
11.26 最近又看到这段代码,之前解决问题查没有抓到根本原因。与导航栏之间 产生空白区域的根本原因是因为下拉刷新之后在没有刷新完时就快速滑动,因为刷新数据 tableView 的contentInset 发生变化,所以导致空白。需要在滑动时更新contentInset
- (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView{
self.oldContentoffsetY= scrollView.contentOffset.y;
}
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
if(scrollView.contentOffset.y>self.oldContentoffsetY) {
scrollView.contentInset=UIEdgeInsetsMake(0,0,0,0);
}
}
网友评论