iOS 如何让ScrollView的子视图不跟着一起滑动(美团外卖的小脚丫)

效果图.gif

经常看到有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压在下方的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容