我在 iOS 8 中新的状态栏自动隐藏功能中遇到了很多麻烦。
在我的应用程序中,我有一个视图,当用户点击一次时,导航栏和状态栏就会消失。
在横向时,状态栏会自行隐藏,这对我来说很好。我只需要在纵向模式下使用它。
但问题是,当设备处于横向状态并显示状态栏时,当用户点击两次以切换状态栏(如此显示)并将设备切换为纵向模式时,状态栏仍然是隐藏的。
基本上我需要能够隐藏状态栏而不干扰它在 iOS 8 上的自然行为,所以我回顾一下这个场景:
- 用户通过tabBar和导航栏以及状态栏进入侧视图;
- 在视图中点击一次,条形图就会消失
- 用户旋转设备,状态栏未出现 - 好的,我想要这个
- 用户再次点击以显示栏 - StatusBar 仍然隐藏,确定。
- 用户从横向旋转到纵向,然后..
- 状态栏仍然隐藏 - 不好。
MRW >
(source: mshcdn.com http://rack.2.mshcdn.com/media/ZgkyMDEzLzA2LzEzL2Y0L1B1Y2suODkyZGIuZ2lmCnAJdGh1bWIJMTIwMHg5NjAwPg/c6538ddb/a38/Puck.gif)
我尝试调整 willRotate 上的状态栏,但我搞砸了,状态栏在不应该显示的时候可见。我正在使用的代码:
- (BOOL)prefersStatusBarHidden
{
return statusBarHidden;
}
-(void)toggleBars:(UITapGestureRecognizer *)gesture{
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFromBottom;
animation.subtype = kCATransitionFromTop;
animation.duration = .2f;
[animation setTimingFunction:[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]];
BOOL toggleNavigationBar = self.navigationController.navigationBarHidden;
[self.navigationController.navigationBar.layer addAnimation:animation forKey:nil];
[self.navigationController setNavigationBarHidden:!toggleNavigationBar animated:YES];
BOOL toggleTabHidden = self.tabBarController.tabBar.hidden;
if(![[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]isKindOfClass:[NSNull class]]){
if([(NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]boolValue])
{
[self.tabBarController.tabBar.layer addAnimation:animation forKey:nil];
[self.tabBarController setHideTabBar:!toggleTabHidden animated:YES];
}
}
statusBarHidden = [UIApplication sharedApplication].statusBarHidden;
[[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation:UIStatusBarAnimationSlide];
[self setNeedsStatusBarAppearanceUpdate];
if (IS_IOS8){
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
if (statusBarHidden){
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
}
}
}
我正在考虑设置一个标志,当状态栏在横向时隐藏并且所有控件都在那里时,旋转时它将触发状态栏。显然没有成功..
非常感谢任何帮助。
您是否使用基于 UIViewController 的状态栏外观?
如果你实施prefersStatusBarHidden
我想你是的。
Now,
[[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation: UIStatusBarAnimationSlide];
不应该与基于 UIViewController 的状态栏外观一起使用。
你只需要返回不同的值prefersStatusBarHidden
方法和调用setNeedsStatusBarAppearanceUpdate
通知应用程序返回值已更改。
因此,要更改状态栏可见性,您应该这样做
@property (nonatomic, assign) BOOL hideStatusBar;
- (BOOL)prefersStatusBarHidden
{
return self.hideStatusBar;
}
- (void)toggleBars:(UITapGestureRecognizer *)gesture
{
... hide navbar and tabbar ...
self.hideStatusBar = ! self.hideStatusBar;
[self setNeedsStatusBarAppearanceUpdate];
}
就是这样!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)