Masonry小记


效果

想要实现上滑动scrollView时,导航栏隐藏,下滑时,导航栏显示。

//scrollView代理方法中的实现
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    UIPanGestureRecognizer *pan = scrollView.panGestureRecognizer;
//获得手势在视图上滑动的速度 >0 是向下滑动   <0是向上滑动。
       CGFloat velocity = [pan velocityInView:scrollView].y;
    if (velocity > 5) {//此处用0也可以,看自己觉得什么值效果好一些。
        [self.navigationController setNavigationBarHidden:NO animated:YES];
    }else if(velocity < -5){
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }
}

图中红色视图是控制器的view,绿色视图是scrollView的内容视图,scrollView的底色是蓝色的。
这个控制器用的是Storyboard创建的,约束scrollView的时候将scrollView的顶部

约束.png

图中如果约束superView的话,可以Constant的值使其盖住状态栏,如果约束safe area的话,就相当于留出来了状态栏的20高度。
下边用Masonry约束实现这个效果。


    self.scrollView= [[UIScrollView alloc]init];
    self.scrollView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:self.scrollView];
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.top.equalTo(self.mas_topLayoutGuideBottom);//约束留出导航栏 11之前
        make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);//约束留出导航栏 11之后
        make.left.right.bottom.equalTo(self.view);
    }];
    self.scrollView.delegate = self;
    
    
  //内容视图 将scrollView撑起来
    UIView *contentView = [[UIView alloc]init];
    contentView.backgroundColor = [UIColor greenColor];
    [self.scrollView addSubview:contentView];
    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.right.left.bottom.equalTo(self.scrollView);
        make.width.mas_equalTo(self.scrollView.mas_width);
        make.height.mas_equalTo(1000);
    }];

运行代码效果也是截图的效果。注意make.top.equalTo(self.mas_topLayoutGuideBottom);不要约束为父视图的top。

你可能感兴趣的:(Masonry小记)