想要实现上滑动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的顶部
图中如果约束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。