主要是通过修改 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中