iOS 更改状态栏、导航栏颜色,电池颜色

2021-01-16 09:39:32

参考链接 iOS 更改状态栏、导航栏颜色的几种方法

注意事项,两种方法设置View controller-based status bar appearance 的值不一样,并且如果你的plist里面没有View controller-based status bar appearance,你需要新建一个。然后就可以成功了。


<pre>

ios上状态栏 就是指的最上面的20像素高的部分
状态栏分前后两部分,要分清这两个概念,后面会用到:

前景部分:就是指的显示电池、时间等部分;
背景部分:就是显示黑色或者图片的背景部分;

(一)设置statusBar的【前景部分】

简单来说,就是设置显示电池电量、时间、网络部分标示的颜色, 这里只能设置两种颜色:

默认的黑色(UIStatusBarStyleDefault)
白色(UIStatusBarStyleLightContent)
可以设置的地方有两个:plist设置里面 和 程序代码里
初始化设置:导航栏设置为不透明并给了"标题"与状态栏文字作对比

                   self.edgesForExtendedLayout = 0;
                   self.navigationItem.title = @"标题";

image

改变状态栏的方法
方法一:
1、plist
View controller-based status bar appearance 设置为 NO

image

2、代码设置

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

效果如下:

image

方法二:
1、plist
View controller-based status bar appearance 设置为 YES 或者默认(不设置)
注意:
如果View controller-based status bar appearance为YES。
则[UIApplication sharedApplication].statusBarStyle 无效。
2、代码设置

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

image

或者在控制器中重写 preferredStatusBarStyle方法,修改状态栏颜色

- (UIStatusBarStyle)preferredStatusBarStyle {//    return UIStatusBarStyleLightContent;
    return UIStatusBarStyleDefault;}

(二)设置statusBar的【背景部分】
背景部分,简单来说,就是背景色;改变方法有两种:

1、系统提供的方法

navigationBar的setBarTintColor接口,用此接口可改变statusBar的背景色

self.navigationController.navigationBar.barTintColor = [UIColor greenColor];

image

如果想将状态栏和导航栏字体全变为白色,这样就行

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

image

如果只想改变导航栏的字体颜色,可以这样

[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]}];

image

还可以改变字体大小

[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:25]}];

image

或者可以设置背景图片

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"image01"] forBarMetrics:UIBarMetricsDefault];

image

2、另辟蹊径

创建一个UIView,
设置该UIView的frame.size 和statusBar大小一样,
设置该UIView的frame.origin 为{0,-20},
设置该UIView的背景色为你希望的statusBar的颜色,
在navigationBar上addSubView该UIView即可。
原理:
状态栏区域相对于navigationBar的区域为

{0,-20,self.view.bounds.size.width,20}

除了改变状态栏的前景色(文字颜色,wifi颜色,时间颜色,电池颜色),就是改变背景色.由于状态栏区域上的控件是隐藏的,所以只要在状态栏区域被渲染了颜色,状态栏的背景颜色就跟着一起改变,从而改变了状态栏的背景颜色.

UIView *statusBarView = [[UIView alloc]   initWithFrame:CGRectMake(0, -20,    self.view.bounds.size.width, 20)];statusBarView.backgroundColor = [UIColor greenColor];[self.navigationController.navigationBar addSubview:statusBarView];

image

另外图片透明处理
navigationBar为透明,注释掉self.edgesForExtendedLayout = 0;

// self.edgesForExtendedLayout = 0;
 [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]
 self.navigationController.navigationBar.shadowImage = [UIImage new];


  • 2020-12-07 15:04:03

    node开发邮件系统总结

    因为multipart这种形式比较复杂,因此要利用boundary分割符,将邮件体分割成不同段来进行解析,boundary分为父段和子段,父段一般出现0次或1次,出现在末尾,每个子段中也有content-type和boundary,需要在进行解析,如果遇到i,iii里面的情况可直接解析,如果遇到ii中的情况,再按ii中的步骤进行解析

  • 2020-12-07 15:17:45

    email-templates + mjml 发送邮件

    mjml 是一个很不错的响应式邮件html 内容标签库,email-templates 是一个灵活强大的邮件发送框架,两者集成起来我们 可以设计灵活强大的邮件发送系统,以下是一个简单的集成使用,实际使用还有好多地方需要完善

  • 2020-12-07 15:19:00

    响应式邮件的编写插件介绍mjml

    以前做项目碰到发邮件的需求,邮件模板的编辑就是一件头疼的事。因为虽说邮件是支持 HTML 的,但是确是 HTML 子集程度的支持,所以存在必须通过 <table> 排版的恶心之处,还有很多兼容性的坑。本质上是各家邮件商的标准有差异吧。

  • 2020-12-07 16:14:22

    nodejs队列实现amqplib,rabbitmq

    其中StartConsumer 会在项目启动时启动,在整个生命周期中一直保持监听状态,在程序结束时mq的链接关闭。需要注意的是 noAck 这个参数,当为false是表示消息出队后不会自动删除,如果设置成true,则无论消息处理成功与否此消息会被删除。注意到在消息不成功是,调用了ch.nack(msg)),此方法是将消息重新入队。

  • 2020-12-07 16:15:46

    RabbitMQ详解

    当前市面上mq的产品很多,比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。 ActiveMQ ActiveMQ是apache出品,最流行的,能力强劲的开源消息总线,并且它一个完全支持JMS规范的消息中间件。其丰富的API、多种集群构建模式使得它成为业界老牌消息中间件,在中小型企业中应用广泛。

  • 2020-12-07 16:17:53

    nodejs用redis实现队列操作

    其实nodejs实现队列的方式又很多中,也有很多开源的插件和队列数据库可以使用,但是呢,如果我们一个简单的项目,完全可以使用redis来实现队列, 这样再不增加技术难度的同事,我们也就可以完美的实现一个队列

  • 2020-12-07 22:02:44

    intellij idea远程开发的几个想法

    我之前是用idea上面自带的stfp来做的本地开发同步到linux服务器编译,但是我发现这个如果多个客户端同时开发,或者多个同事一起开发,服务器上的就不能更新到本地。是不能增量更新到本地,必须全部下载,比对下载也行,但是工程量打了就特别慢。