ios关于tabview头部悬停

时间:2021-07-08 19:36:11

首先确定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头部悬停,若有更好的方法,谢谢各位提供。