ios 适配iPhonex时可以改变状态栏statusBar的背景颜色
来源:互联网 发布:淘宝 lolita布料 编辑:程序博客网 时间:2024/05/17 21:47
一、无导航条的情况:
系统默认状态栏的字体颜色为黑色,即UIStatusBarStyle=UIStatusBarStyleDefault,同时背景颜色和self.view.backgroundColor颜色一致,如下图所示:
假如我想让状态栏颜色设置成红色,字体仍为黑色,可以在需要显示的那一页进行如下设置:(最好写在viewWillAppear里面)
//设置状态栏颜色- (void)setStatusBarBackgroundColor:(UIColor *)color { UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = color; }}- (void)viewDidLoad { [super viewDidLoad]; [self setStatusBarBackgroundColor:[UIColor redColor]]; self.view.backgroundColor = [UIColor yellowColor];}
效果如下:
假如此时我想让状态栏文字颜色变成白色,可以这样操作:
在上面代码的基础上再添加下面一段代码:- (UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent;}
效果如下:
问题来了,当你在这一页点击按钮进入下一页后,状态栏背景颜色不变,还是红色,而字体颜色却变成黑色了,比较闹心!可以通过下面的方法随心所欲的在任意一页修改状态栏的字体颜色(字体颜色只有白色和黑色)和背景颜色(直接复制到项目中即可
//设置字体颜色- (UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent;//白色}//设置状态栏颜色- (void)setStatusBarBackgroundColor:(UIColor *)color { UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = color; }}//!!!重点在viewWillAppear方法里调用下面两个方法-(void)viewWillAppear:(BOOL)animated{ [self preferredStatusBarStyle]; [self setStatusBarBackgroundColor:[UIColor redColor]];}- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor yellowColor]; }
下面的效果是第一页要红底白字,第二页要绿底黑字,返回后也是正常显示
二、有导航条的情况
当我在上面的基础上添加了导航条后,会发现字体颜色由之前的白色变成黑色了,背景颜色倒没有发生变化
不用担心,可以通过下面的方法完美解决:
//设置状态栏颜色- (void)setStatusBarBackgroundColor:(UIColor *)color { UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = color; }}-(void)viewWillAppear:(BOOL)animated{ [self setStatusBarBackgroundColor:[UIColor redColor]]; [UIApplication sharedApplication].statusBarStyle=UIStatusBarStyleLightContent;}--->!!!同时别忘了在info plist里面将View controller-based status bar appearance设置成NO,(默认是YES)
现在基本的设备都适配ios7以上设备,默认的状态栏字体颜色是黑色[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleDefault;现在基本的设备都适配ios7以上设备,默认的状态栏字体颜色是黑色[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
Demo下载地址:https://github.com/zhuchenglong/StatusBarDemo以下是我在实际项目中使用的:
//设置状态栏颜色- (void)setStatusBarBackgroundColor:(UIColor *)color { UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; NSLog(@"statusBar.backgroundColor--->%@",statusBar.backgroundColor); if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = color; }}- (UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent;//白色}- (void)viewDidLoad { [super viewDidLoad]; //Y起点在导航条下面 self.edgesForExtendedLayout = UIRectEdgeNone; //设置navigationItem返回的文字 UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleDone target:nil action:nil]; self.navigationItem.backBarButtonItem = item;}-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //设置导航条透明度 self.navigationController.navigationBar.translucent = NO;//不透明 [[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:1]; //图标颜色为黑色 [self.navigationController.navigationBar setTintColor:[UIColor blackColor]]; //导航栏背景颜色 [self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]]; //导航条下面的黑线 self.navigationController.navigationBar.clipsToBounds = NO; //刷新状态栏背景颜色 // [self setNeedsStatusBarAppearanceUpdate]; //设置状态栏颜色 [self setStatusBarBackgroundColor:[UIColor blackColor]];}//一定要在viewWillDisappear里面写,如果写在viewDidDisappear里面会出问题!!!!- (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; //为了不影响其他页面在viewDidDisappear做以下设置 self.navigationController.navigationBar.translucent = YES;//透明 [self setStatusBarBackgroundColor:[UIColor clearColor]];}
效果:
作者:来宝
链接:http://www.jianshu.com/p/5c09c2700038
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
0 0
- ios 适配iPhonex时可以改变状态栏statusBar的背景颜色
- ios 状态栏statusBar的背景颜色
- 改变状态栏statusbar的颜色
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- ios 7 statusbar 状态栏 跟随navigationbar的颜色而改变
- android状态栏一体化(改变状态栏的背景颜色)类似于IOS
- 改变手机状态栏(statusBar)的颜色
- 改变状态栏(StatusBar)的颜色
- 改变状态栏背景颜色
- 改变状态栏背景颜色
- statusbar 状态栏 跟随navigationbar的颜色而改变
- Android状态栏一体化 (改变状态栏的背景颜色)
- android状态栏一体化(改变状态栏的背景颜色)
- 教你如何在微信浏览器唤醒APP
- Java从入门到精通索引
- C/C++ 开发库 | C/C++ Development Library
- D3D11 立方体贴图(天空盒子)
- 关于“上家公司离职原因”应聘者回答技巧分享
- ios 适配iPhonex时可以改变状态栏statusBar的背景颜色
- 浅谈js解决多线程 webWorker介绍
- 设计模式之工厂模式
- 获取生成和解析二维码的Jar包(QRCode方式)
- 【PHP进阶学习】——PHP反射
- codevs 1002 搭桥 dfs+kruskal
- 任学堂说科技:微信致歉翻译不当 因其人工智能将“外国黑人”译为“黑鬼”
- Mysql进行复杂查询
- cannot convert 'cv::VideoCapture' to 'CvCapture*'