Iphone 同时隐藏状态栏和导航栏,就像在图片应用程序中一样

Iphone 同时隐藏状态栏和导航栏,就像在图片应用程序中一样,iphone,ios,animation,uinavigationbar,statusbar,Iphone,Ios,Animation,Uinavigationbar,Statusbar,我有一个包含大量文本的视图,所以我想允许用户在一次点击中隐藏statusBar+navigationBar。我真的很喜欢图片应用程序中的隐藏风格,其中状态栏和导航栏一起隐藏(不是滑动,只是淡出),带有一些动画持续时间,所以我尝试做类似的事情。以下是我在TouchesDidBeging方法中所做的: - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [[UIApplication sharedApplic

我有一个包含大量文本的视图,所以我想允许用户在一次点击中隐藏statusBar+navigationBar。我真的很喜欢图片应用程序中的隐藏风格,其中状态栏和导航栏一起隐藏(不是滑动,只是淡出),带有一些动画持续时间,所以我尝试做类似的事情。以下是我在TouchesDidBeging方法中所做的:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
    [UIView setAnimationDuration:0.5];
[UIView beginAnimations:@"" context:nil];
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationNone];
    [self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:NO];
    [UIView commitAnimations];
    self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view.
}
但这并不能同时隐藏这些条。它使它们滑下来。它与上述方法的此版本具有相同的效果:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
    // deleted UIView animation, changed animation type to "slide"
    [[UIApplication sharedApplication] setStatusBarHidden:!([UIApplication sharedApplication].statusBarHidden) withAnimation:UIStatusBarAnimationSlide];
    // enabled animation for navBar
    [self.navigationController setNavigationBarHidden:(!self.navigationController.navigationBarHidden) animated:YES];
    self.navigationController.navigationBar.translucent = !self.navigationController.navigationBar.translucent; // this is needed to make bars appear on top of my view.
}
如果我去掉UIView动画和没有动画的隐藏条,它们确实会同时隐藏和显示,但速度太快。 也许我走错了方向。如果有人能帮我解决这个问题,我将不胜感激

编辑:成功了 在本演示中,您将了解如何隐藏和显示状态栏和导航栏

  • 大多数情况下,您需要使用NSTimer设置4秒或5秒后自动隐藏状态栏或导航栏

  • 您还可以使用触摸开始随机显示或隐藏来标记此计时器


希望它能帮助你完成任务。使用Barack point检查上述Github链接的示例演示。您可以轻松找到隐藏和显示状态栏或导航栏的功能

对于带动画的隐藏
UIStatusBar

[[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationSlide];
[UINavigationBar beginAnimations:@"NavBarFade" context:nil];
self.navigationController.navigationBar.alpha = 1;
[self.navigationController setNavigationBarHidden:YES animated:NO]; //Animated must be NO!
[UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UINavigationBar setAnimationDuration:1.5];
self.navigationController.navigationBar.alpha = 0;
[UINavigationBar commitAnimations];
对于带有动画的隐藏
UINavigationBar

[[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationSlide];
[UINavigationBar beginAnimations:@"NavBarFade" context:nil];
self.navigationController.navigationBar.alpha = 1;
[self.navigationController setNavigationBarHidden:YES animated:NO]; //Animated must be NO!
[UINavigationBar setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UINavigationBar setAnimationDuration:1.5];
self.navigationController.navigationBar.alpha = 0;
[UINavigationBar commitAnimations];
它将同时隐藏状态栏和导航栏。为状态栏的动画样式选择UIStatusBarAnimationSlide。并更改导航栏的帧

  • 隐藏时,隐藏等于。我们应该先更改导航栏的框架,然后隐藏导航栏
  • 显示时,隐藏等于。我们首先使导航栏可视化,然后更改帧
  • 我们选择UIViewAnimationOptionCurveEaseOut,它看起来会更好

  • 代码中唯一的区别是使用的是UINavigationBar的动画。不过,效果还是一样的。另外,我希望状态栏和导航栏在没有幻灯片的情况下隐藏/显示。我查看了它们的src,在src/KTPhotoBrowser/ktphotocrollviewcontroller中找到了隐藏/显示处理程序方法。m它们还将状态栏和导航栏隐藏包装到UIView动画中。但是,他们没有将navigationBarHidden设置为YES,而是将navigationBar的alpha值从1.0更改为0.0。只需要保持navigationBar.transulent=是。我猜setNavigationBarHidden:animated:方法在包装到UIView动画中时会启用自己的动画(这导致了bw状态栏和navigationBar的异步性)。谢谢你。