iOS8中状态栏的黑色

时间:2014-11-06 08:58:11

标签: ios xcode ios8 ios7-statusbar

我对状态栏行为有点困惑

我不需要透明状态栏 我需要它固定和黑色。 与iOS6相同

我尝试了很多, 我得到了什么, 它只在我第一次启动应用程序时显示黑色 当我将设备旋转到横向并再次制作成肖像时,它会采用导航栏颜色。

我做错了什么。

任何人都可以指导我。

这就是我得到的

enter image description here

这就是我想要的方式

enter image description here

2 个答案:

答案 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仍然存在。没有代表告诉我预览被点击了。如果您有任何想法,请将其留在评论中。