您的位置:首页 > 移动开发 > IOS开发

iOS7下status bar相关问题的解决方法

2014-01-12 22:46 323 查看
转载自:http://blog.csdn.net/volcan1987/article/details/14227313

iOS7里status bar的实现跟iOS6下有写不一样,前段时间碰到了这个问题,今天总结下

首先网上有很多解决办法,但是有些我觉得并没有按照苹果的思路来,比如把UIViewControllerBasedStatusBarAppearance在plist里设置为NO的方法,这个方法的确可行,但是并不是一个“正确”的思路,而且会有些问题,比如,当你在某个界面隐藏了status
bar,退回到上一个界面时,status bar仍然是隐藏的

首先,苹果把UIViewControllerBasedStatusBarAppearance默认的值设为YES,是有他的道理的,新系统下,苹果希望我们的viewcontroller去控制status
bar,也就是说,我们大多数的界面应该是统一的,偶尔一些viewcontroller需要status bar特殊控制的,完全交给当前的viewcontroller来做。

代码,其中_isFullScreen需要你在调用setNeedsStatusBarAppearanceUpdate

之前设置好相应的值

[objc] view
plaincopy

#pragma mark - Status Bar  

  

- (UIStatusBarStyle)preferredStatusBarStyle  

{  

    return UIStatusBarStyleDefault;  

}  

  

- (BOOL)prefersStatusBarHidden  

{  

    return _isFullScreen;  

}  

  

- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation  

{  

    return UIStatusBarAnimationSlide;  

}  

这样,当你想要控制status bar的展现形式时(不需要动画就去掉),只需要调用

[objc] view
plaincopy

[UIView animateWithDuration:.3 animations:^{  

            if (ISIOS7) {  

                [self setNeedsStatusBarAppearanceUpdate];  

            }  

        }];  

1楼 不息 2013-11-06 17:29发表 [回复] [引用] [举报]


补充一点:

如果你使用了系统的UINavigationController,且它的navigationBar没有被隐藏的话,它的rootController及之后push的controller的preferredStatusBarStyle方法不会被调用(其他两个方法还是会被调用);

UINavigationController会根据自己navigationBar的barStyle,来决定StatusBarStyle的值;

如果你设置了self.navigationController.navigationBarHidden = YES;

那preferredStatusBarStyle就会被正常调用了。

Re: volcan1987 2013-11-06 17:34发表 [回复]


回复iami11tongmeng:支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: