更改状态栏背景颜色的颜色过去的iOS 7

我想改变iOS 7上的状态栏的背景颜色,我使用这个代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UIApplication sharedApplication].statusBarHidden = NO; self.window.clipsToBounds = YES; [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent]; self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20); self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height); ... ... } 

当我写这个时,它显示黑色背景的状态栏; 我希望它有一个红色的背景。

怎样才能改变状态栏的颜色,而不是黑色的红色背景?

在iOS 7及更高版本中,状态栏是透明的 。 将视图的backgroundColor设置为状态栏所需的颜色。

或者,您可以在视图的顶部添加一个红色的20像素的子视图。

有关更多信息,请参阅Apple转换指南 。

此外,请确保您的preferredStatusBarStyleUIStatusBarStyleLightContent 。 并在Info.plist中将“基于视图控制器的状态栏外观”设置为“NO”。

处理iOS 7状态栏的背景颜色时,有2种情况

案例1:使用导航栏进行查看

在这种情况下,请在viewDidLoad方法中使用以下代码

  UIApplication *app = [UIApplication sharedApplication]; CGFloat statusBarHeight = app.statusBarFrame.size.height; UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)]; statusBarView.backgroundColor = [UIColor yellowColor]; [self.navigationController.navigationBar addSubview:statusBarView]; 

情况2:没有导航栏的视图

在这种情况下,请在viewDidLoad方法中使用以下代码

  UIApplication *app = [UIApplication sharedApplication]; CGFloat statusBarHeight = app.statusBarFrame.size.height; UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)]; statusBarView.backgroundColor = [UIColor yellowColor]; [self.view addSubview:statusBarView]; 

目标c

 (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[UIApplication sharedApplication] setStatusBarHidden:false]; UIView *statusBar=[[UIApplication sharedApplication] valueForKey:@"statusBar"]; statusBar.backgroundColor = [UIColor redColor]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; return YES; } 

这是为我工作。 我希望这也能帮助你。

对于@Teja Kumar Bethina提供的内容是有帮助的,但是最好从UIApplication单例中获得statusBar的高度,如下所示:

 UIApplication *app = [UIApplication sharedApplication]; UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -app.statusBarFrame.size.height, self.view.bounds.size.width, app.statusBarFrame.size.height)]; statusBarView.backgroundColor = [UIColor blackColor]; 

在AppDelegate中使用

  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

并在项目info.plist文件

将标志NO设置为在应用程序中查看基于控制器的状态栏外观。

从状态栏颜色传递的ViewDidLoad中调用此函数。

 func setStatusBarBackgroundColor(color: UIColor) { guard let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else { return } statusBar.backgroundColor = color } 

希望它会有所帮助。

这是一个使用自动布局的快速解决scheme,如果您的应用程序是纵向或横向,则横条将是正确的宽度。 它作为子视图添加到导航栏视图中,因此它被-20所偏移。 您可以将其添加到您的导航栏的父视图,然后偏移量不是必需的。 这个例子还将颜色设置为与导航栏相同。

希望帮助:)

  // Add colored opaque view behind the status bar view let statusBarView = UIView() statusBarView.backgroundColor = navigationBar.backgroundColor statusBarView.translatesAutoresizingMaskIntoConstraints = false navigationBar.addSubview(statusBarView) let views = ["statusBarView": statusBarView] let hConstraint = "H:|-0-[statusBarView]-0-|" let vConstraint = "V:|-(-20)-[statusBarView(20)]" var allConstraints = NSLayoutConstraint.constraintsWithVisualFormat(hConstraint, options: [], metrics: nil, views: views) allConstraints += NSLayoutConstraint.constraintsWithVisualFormat(vConstraint, options: [], metrics: nil, views: views) NSLayoutConstraint.activateConstraints(allConstraints) 

如果您的应用程序是基于导航的,那么您可以像下面这样设置状态栏的背景颜色:

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]]; 

可能会有所帮助。