UITableViewController实现固定tableHeaderView的效果

self.topView = [UIView new];
self.topView.backgroundColor = [UIColor redColor];
[self.tableView addSubview:self.topView];
    
[self.topView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.mas_equalTo(-50);
    make.left.mas_equalTo(0);
    make.size.mas_equalTo(CGSizeMake(self.tableView.frame.size.width, 50));
}];

// 将topView移到最顶层,防止被其他view挡住
[self.tableView bringSubviewToFront:self.topView];

// 设置tableView的向下偏移50
self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);

在UIScrollView的代理方法中设置滚动偏移,此处我用Autolayout改变topView距离tableView上约束的constant值,也可改变它的frame中的y值来实现

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat offset = self.tableView.contentOffset.y;
    [self.topView mas_updateConstraints:^(MASConstraintMaker *make) {
        // 此处有加上navigationBar的高度
        make.top.mas_equalTo(offset + 64);
    }];
    [self.tableView layoutIfNeeded];
}

你可能感兴趣的:(UITableViewController实现固定tableHeaderView的效果)