更改状态栏背景颜色的颜色过去的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转换指南 。
此外,请确保您的preferredStatusBarStyle
是UIStatusBarStyleLightContent
。 并在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]];
可能会有所帮助。