美文网首页iOS 控件定制程序员iOS进阶之路
iOS 如何让ScrollView的子视图不跟着一起滑动(美团外

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

作者: Zhui_Do | 来源:发表于2017-05-03 18:29 被阅读273次
    效果图.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压在下方的效果。

    相关文章

      网友评论

      本文标题:iOS 如何让ScrollView的子视图不跟着一起滑动(美团外

      本文链接:https://www.haomeiwen.com/subject/yetttxtx.html