首先确定tabview头部有一个view,并且继承与UIview。当tabview上下滑动时头部view惯性跟随滑动。
废话不多,直接上代码:
viewcontroller 先创建tabview,topview两个view (懒加载),然后添加tabview,topview。至于tabview代理方法不再写。
-(UIView*)topView{
if (!_topView) {
//创建顶部的条
_topView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150)];
_topView.backgroundColor = [UIColor greenColor];
}
return _topView;
}
-(UITableView*)tabV{
if (!_tabV) {
_tabV=[[UITableView alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(self.topView.frame), self.view.frame.size.width, self.view.frame.size.height-150-navH) style:UITableViewStyleGrouped];
_tabV.estimatedRowHeight=0;
_tabV.estimatedSectionFooterHeight=0;
_tabV.estimatedSectionHeaderHeight=0;
_tabV.delegate=self;
_tabV.dataSource=self;
_tabV.rowHeight=50;
[_tabV registerClass:[UITableViewCell class] forCellReuseIdentifier:cellid];
}
return _tabV;
}
最后用scrollview的代理方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 监听tabview动向。
代码如下:
注意:
#define navH self.navigationController.navigationBar.frame.size.height
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (self.tabV.contentOffset.y > 0 ) {
self.topView.frame = CGRectMake(0, -self.tabV.contentOffset.y-navH, self.view.frame.size.width, 150) ;
if (self.tabV.contentOffset.y >= 100) {
self.topView.frame = CGRectMake(0, -100, self.view.frame.size.width, 150) ;
}
_tabV.frame=CGRectMake(0, CGRectGetMaxY(self.topView.frame), self.view.frame.size.width, self.view.frame.size.height-150-navH);
}else{
self.topView.frame = CGRectMake(0, -self.tabV.contentOffset.y, self.view.frame.size.width, 150) ;
[self.view addSubview:self.topView];
}
}
这样便简单实现tabview头部悬停,若有更好的方法,谢谢各位提供。