方法一:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
self.navigationController.navigationBarHidden = NO;
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
if(velocity.y>0){
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}else{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
这个方法的缺点是实时性比较差,主要是因为导航栏消失是需要你的手指离开屏幕后导航栏才会消失,这种方法可以实现功能但是如果要求实时性的话是不满足要求的。
方法二:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
_disappear = NO;
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
_disappear = YES;
self.navigationController.navigationBarHidden = NO;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (self.collectionView==scrollView&&_disappear==NO) {
CGFloat currentPostion = scrollView.contentOffset.y;
CGRect bounds = scrollView.bounds;
CGSize size = scrollView.contentSize;
UIEdgeInsets inset = scrollView.contentInset;
CGFloat currentBottomOffset = currentPostion + bounds.size.height - inset.bottom;
CGFloat maxBottomOffset = size.height;
CGFloat minBottomOffset = -64 + bounds.size.height - inset.bottom;
//非上拉刷新、底部刷新状态
if (minBottomOffset < currentBottomOffset && currentBottomOffset<=maxBottomOffset) {
if (currentPostion - _lastPosition > 0 ) {
//NSLog(@"向上滚动 隐藏导航栏");
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}else if ( currentPostion - _lastPosition < 0 ){
//NSLog(@"向下滚动 显示导航栏");
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
_lastPosition = currentPostion;
}
}
}
这种方法完全满足需求,但是需要解释的是disappear这个问题,这个主要是用来解决的问题是当导航栏消失的时候跳转到别的控制器时导航栏消失的问题。