iOS7之后经过滑动返回导航栏隐藏和显示带来的坑(转载)

时间:2023-03-09 05:16:19
iOS7之后经过滑动返回导航栏隐藏和显示带来的坑(转载)

iOS7之后经过滑动返回导航栏隐藏和显示带来的坑

Apple 自从iOS7之后增加了屏幕边缘右滑返回交互的支持,再配合UINavigationController的交换动画,pop上一级的操作变的非常带感,从此我很少使用点击左上角导航栏返回按钮了的方式返回.如果一个App不支持滑动返回,那说明太不注重客户体验了,等iOS9出来后,基本上的App都支持7.0以上吧.

接下来讲下滑动返回处理导航栏的显示和隐藏如果开发者不好好理解这块(动画效果),很容易给项目带来非常不好的体验.

比如:利用系统的UINavigationBar时,返回手势重若碰到前一个页面有bar,后一个页面没bar,或者反过来时动画非常难看,要解决此问题需要在滑动返回的后要出现的viewController中写下面的代码:

//隐藏

- (void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

[self.navigationController setNavigationBarHidden:YES animated:animated];

//很多同学习惯这样写

[self.navigationController setNavigationBarHidden:YES animated:YES];//带动画结果在切换tabBar的时候viewController会有闪动的效果不建议这样写

}

//显示

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

[self.navigationController setNavigationBarHidden:NO animated:animated];

}

为啥会这样呢,我猜应该是UINavigationController 在导航栏控制API上设计的缺陷,一个UINavigationController管理了N个UIViewController栈式的push和pop,而UINavigationBar 有UINavigationController管理.这就导致了UIViewConstroller无法控制自己上面bar单独隐藏和显示,非常类似UIApplication全局的status bar,不过在iOS7之后为viewController控制自己的status bar 提供下面的几个方法:

-(BOOL)prefersStatusBarHidden;

-(UIStatusBarStyle)preferredStatusBarStyle;

-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation;