Phi*_*lip 16 objective-c statusbar orientation
我在iOS 8中新的自动隐藏状态栏时遇到了很多麻烦.
在我的应用程序中,我有一个视图,当用户点击一次时,导航栏和状态栏消失.
在横向时,状态栏会自行隐藏,对我来说没问题.我只需要在纵向模式下使用它.
但问题是当设备是横向并且显示条形时,当用户点击两次以切换条形(如此显示),并且以纵向模式转动设备时,状态栏仍然是隐藏的.
基本上我需要能够隐藏statusBar而不会干扰它在iOS 8上的自然行为,所以我回顾一下这个场景:
我试图在willRotate上调整statusBar,但是我弄得一团糟,其中statusBar在不应该的时候可见.我正在使用的代码:
- (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];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑设置一个标志,当在横向和状态下隐藏statusBar时,在旋转时它会触发statusBar.没有成功,显然......
任何帮助高度赞赏.
hyb*_*ttt 27
你在使用基于UIViewController的状态栏外观吗?如果你实施prefersStatusBarHidden我假设你是.
现在,
[[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation: UIStatusBarAnimationSlide];
Run Code Online (Sandbox Code Playgroud)
不应该使用基于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];
}
Run Code Online (Sandbox Code Playgroud)
就是这样!
这对我有用:
- (void)viewWillLayoutSubviews {
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13333 次 |
| 最近记录: |