我对状态栏行为有点困惑
我不需要透明状态栏 我需要它固定和黑色。 与iOS6相同
我尝试了很多, 我得到了什么, 它只在我第一次启动应用程序时显示黑色 当我将设备旋转到横向并再次制作成肖像时,它会采用导航栏颜色。
我做错了什么。
任何人都可以指导我。
这就是我得到的
这就是我想要的方式
答案 0 :(得分:1)
你做了一个hack设置状态栏颜色,应用程序不会被Apple拒绝,但不能保证Apple在下一个iOS版本中不会改变这种行为。
- (void)setStatusBarColor:(UIColor *)color {
id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"_statusBarWindow"];
NSString *statusBarWindowClassString = NSStringFromClass([statusBarWindow class]);
if ([statusBarWindowClassString isEqualToString:@"UIStatusBarWindow"]) {
NSArray *statusBarWindowSubviews = [statusBarWindow subviews];
for (UIView *statusBarWindowSubview in statusBarWindowSubviews) {
NSString *statusBarWindowSubviewClassString = NSStringFromClass([statusBarWindowSubview class]);
if ([statusBarWindowSubviewClassString isEqualToString:@"UIStatusBar"]) {
[statusBarWindowSubview setBackgroundColor:color];
}
}
}
}
答案 1 :(得分:0)
这是iOS8,Swift,Xcode 6.3的解决方案。
添加背景颜色:
var statusBarBackground = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 30))
statusBarBackground.backgroundColor = UIColor.blackColor()
statusBarBackground.tag = 13
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window!.rootViewController!.view.addSubview(statusBarBackground)
appDelegate.window!.rootViewController!.view.bringSubviewToFront(navigationController!.navigationBar)
删除背景颜色:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
for sv in appDelegate.window!.rootViewController!.view.subviews {
if sv.tag == 13 {
sv.removeFromSuperview()
}
}
为什么我不将statusBarBackground添加到viewController的视图中?因为我需要这个UIDocumentInteractionController预览视图,现在它不允许任何自定义。
为什么我将statusBarBackground设置为30,从而迫使我为navigationBar执行bringSubviewToFront?因为我的导航栏有圆角(带有遮罩层,所以不是图像),因此显示导航栏后面的视图(我想要与状态栏背景颜色相同。
仍然要弄清楚:如果点击预览,导航栏会向上移动,但(当然)statusVarBackground仍然存在。没有代表告诉我预览被点击了。如果您有任何想法,请将其留在评论中。