一、关于隐藏导航栏的几个属性、一下为默认值
self.navigationController.hidesBarsOnSwipe = NO;
self.navigationController.hidesBarsOnTap = NO;
self.navigationController.hidesBottomBarWhenPushed = NO;
self.navigationController.hidesBarsWhenKeyboardAppears = NO;
self.navigationController.hidesBarsWhenVerticallyCompact = NO;
1、hidesBarsWhenKeyboardAppears
self.navigationController.hidesBarsWhenKeyboardAppears = YES; // 当键盘弹出的时候,导航栏自动隐藏,默认NO,注意:如果只设置这个属性为YES,键盘出现的时候,导航栏就自动隐藏了,但是之后无论怎么操作,导航栏都不会再显示出来,所有需要配合hidesBarsOnSwipe或者hidesBarsOnTap使用,这样的话,导航栏就能自如的隐藏和展示了
2、hidesBarsOnSwipe
self.navigationController.hidesBarsOnSwipe = YES; // 上下滑动的时候,导航栏自动隐藏和显示
3、hidesBarsOnTap属性,
self.navigationController.hidesBarsOnTap = YES; // 点击控制器的时候,导航栏自动隐藏和显示
4、hidesBarsWhenVerticallyCompact属性,
self.navigationController.hidesBarsWhenVerticallyCompact = YES; // 当导航栏的垂直size比较紧凑的时候,导航栏自动隐藏
5、hidesBottomBarWhenPushed属性,
该属性默认NO,设置为YES的话,在导航栏push控制器的时候,自动将tabBar隐藏,隐藏之后不会自动显示出来,还需手动设置
二、向下滑动隐藏 navigationbar、tabbar,向上滑动显示
self.navigationController.hidesBarsOnSwipe = YES;滑动隐藏导航栏可直接使用这个属性。或者使用以下方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//scrollView已经有拖拽手势,直接拿到scrollView的拖拽手势
UIPanGestureRecognizer *pan = scrollView.panGestureRecognizer;
//获取到拖拽的速度 >0 向下拖动 <0 向上拖动
CGFloat velocity = [pan velocityInView:scrollView].y;
if (velocity <- 5) {
//向上拖动,隐藏导航栏
self.tabBarController.tabBar.hidden = YES;
[self.navigationController setNavigationBarHidden:YES animated:YES];
}else if (velocity > 5) {
//向下拖动,显示导航栏
self.tabBarController.tabBar.hidden = NO;
[self.navigationController setNavigationBarHidden:NO animated:YES];
}else if(velocity == 0){
//停止拖拽
}
}