在ios 7中将UI状态栏的背景颜色设置为黑色

Posted

技术标签:

【中文标题】在ios 7中将UI状态栏的背景颜色设置为黑色【英文标题】:Set the background color of UIStatusBar as black in ios7 【发布时间】:2014-09-25 11:57:56 【问题描述】:

我不知道如何在 ios7 中将 UIStatusBar 的背景颜色设置为黑色,而导航栏的背景颜色不是黑色。因为在 iOS7 中导航栏是透明的,所以状态栏从 UINavigationBar 的背景颜色获取背景颜色.and text over statusbar应该是白色的。我使用过UIStatusBarStyleBlackOpaque,但它在iOS7中也被弃用了。我知道我可以通过将StatusBarStyle设置为来将状态栏的文本颜色更改为白色UIStatusBarStyleLightContent.

为了将 UIStatusBar 的背景颜色设置为黑色,我使用了以下代码:-

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
        UIView *addStatusBar = [[UIView alloc] init];
        addStatusBar.frame = CGRectMake(0, 0, 320, 20);
        addStatusBar.backgroundColor = [UIColor blackColor];
        [self.window.rootViewController.view addSubview:addStatusBar];
    

通过上面的代码,我手动添加了 uiview 来代替所需颜色的状态栏。 问题是,这个 uistatusbar 被移到了黑色视图的后面,即 addStatusBar,因此状态栏上的文本被隐藏了。

如何解决?

请帮忙!! 提前致谢!!

【问题讨论】:

【参考方案1】:

我刚刚添加了这一行以使导航栏不透明。

[navC.navigationBar setTranslucent:NO];

并使用与上述相同的代码添加 uiview 来代替状态栏,并使用所需的颜色。使用 lightcontentstyle 以白色显示文本。 它解决了我的问题。

【讨论】:

【参考方案2】:

转到您的应用 info.plist

1) 将基于视图控制器的状态栏外观设置为 NO 2) 将状态栏样式设置为 UIStatusBarStyleLightContent

然后转到您的应用委托并将以下代码粘贴到您设置 Windows 的 RootViewController 的位置。

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))

    UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
    view.backgroundColor=[UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];

希望对你有帮助。

【讨论】:

感谢 user3432164,但我已经添加了,但忘了提及:)【参考方案3】:

您可以在应用程序启动期间或视图控制器的 viewDidLoad 期间设置/更改状态栏的背景颜色。

我在这里尝试使用 iOS 11(使用 Swift 4):

extension UIApplication 

    var statusBarView: UIView? 
        return value(forKey: "statusBar") as? UIView
    




// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.cyan
        return true
    



or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        UIApplication.shared.statusBarView?.backgroundColor = UIColor.cyan
    


结果如下:

【讨论】:

以上是关于在ios 7中将UI状态栏的背景颜色设置为黑色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 上将状态栏内容颜色设置为白色

ios7 statusBar的字体颜色怎么设置为白色的呢

如何在iOS 7上更改状态栏背景颜色和文本颜色? Warif Akhand Rishi

UIViewController为啥设置不了背景颜色

如何在 iOS 7 上更改状态栏背景颜色和文本颜色?

iOS 7中导航栏的默认背景颜色是什么?