iOS TableView 修改SectionHeaderView 悬停位置

713 阅读1分钟

主要是通过修改 contentInset 属性 修改TableView内容位置

//设置分组头悬停
self.tableView = [[UITableView alloc] initWithFrame:frame style:UITableViewStyleGrouped];
//修改内容实体偏移量
self.tableView.contentInset = UIEdgeInsetsMake(NavaBarHeight, 0, 0, 0);

我的处理场景:

  • 透明渐变色导航栏,so我的TableView是顶在屏幕顶部的,所以headerView默认悬停位置在状态栏 也就是屏幕顶部
  • tableView集成了MJRefreh刷新加载功能,需要在scrollViewDidScroll方法中,避免冲突

处理

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat offectY = scrollView.contentOffset.y;
    
    //导航栏颜色渐变处理
    if (offectY/100 <= 1) {
        [self.navigationController dy_clearNavigationBar_Alpha:offectY/100 R:8 G:148 B:255];
    }else{
        [self.navigationController dy_clearNavigationBar_Alpha:1 R:8 G:148 B:255];
    }
    
    //悬停处理
    // 差值 = 头视图高度(sectionHeaderView的高度) + 导航条高度(状态栏+导航栏)
    if (offectY >= 55 + NavaBarHeight) {
        self.tableView.contentInset = UIEdgeInsetsMake(NavaBarHeight, 0, 0, 0);
    } else {
        self.tableView.contentInset = UIEdgeInsetsZero;
    }
}
  • 我在viewWillAppear方法中设置的导航栏背景透明,在scrollViewDidScroll方法中根据滑动距离修改导航栏颜色渐变
  • 在viewDidLayoutSubviews方法中设置tableVIew默认偏移量 【tableView.contentInset = UIEdgeInsetsZero】但是会导致滑动到某个位置时headerView闪烁,所以将默认偏移量设置写在viewDidAppear或viewDidLoad中

最终效果

RPReplay_Final1686386771.gif