经常看到有tableView的headView向上滑动时是压在tableview下面的,闲来无事就写了一下。
有两个问题需要解决:
1.如何把视图加在tableview上但是tableview滑动时做为子视图的headview还不跟着滑动。
2.如何设置tableview的起始位置,把headView 暴露出来,并且当tableview向上滑动时tableview不会回弹。
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.navigationController.navigationBarHidden = YES;
UITableView *tableView = [UITableView new];
tableView.frame = self.view.frame;
[self.view addSubview:tableView];
tableView.delegate = self;
tableView.dataSource = self;
UIImageView *view = [[UIImageView alloc] initWithFrame:(CGRectMake(0, -200, DZHWidth, 200))];
view.image = [UIImage imageNamed:@"scrollImage1.jpg"];
[tableView insertSubview:view atIndex:0];
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(20);
make.right.left.equalTo(self.view);
make.height.mas_equalTo(200);
}];
tableView.contentInset = UIEdgeInsetsMake(200, 0, 0, 0);
self.tableView = tableView;
self.tableView.bounces = false;
}
- 先说一下第一个问题,如何在scrollView 上添加不跟着滑动的子视图:这里想到的解决办法是添加约束,虽然headview是添加在scrollView 上,但是headview的约束却是参照self.view来添加的,所以无论tableView怎么滑动headview都不会变。(masonry,设置顶部距离self.view距离为20,所以位置就固定下来了,只要self.view不动headView就肯定不会动)
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(20);
make.right.left.equalTo(self.view);
make.height.mas_equalTo(200);
}];
- 第二个问题是如何把headview暴露出来
[tableView insertSubview:view atIndex:0];
tableView.contentInset = UIEdgeInsetsMake(200, 0, 0, 0);
主要是设置一下tableview的content inset,让他距离上方留下head view高度(200)的距离。
这里测试了tableview addsubview 和 tableview.tableHeadView 虽然都可以添加到tableView上,但是headView会在tableViewCell的上层,不能实现把headview压在下方的效果。