iOS 更改状态栏、导航栏颜色的几种方法
ios上状态栏 就是指的最上面的20像素高的部分
状态栏分前后两部分,要分清这两个概念,后面会用到:
前景部分:就是指的显示电池、时间等部分;
背景部分:就是显示黑色或者图片的背景部分;
(一)设置statusBar的【前景部分】
简单来说,就是设置显示电池电量、时间、网络部分标示的颜色, 这里只能设置两种颜色:
默认的黑色(UIStatusBarStyleDefault)
白色(UIStatusBarStyleLightContent)
可以设置的地方有两个:plist设置里面 和 程序代码里
初始化设置:导航栏设置为不透明并给了"标题"与状态栏文字作对比
self.edgesForExtendedLayout = 0;
self.navigationItem.title = @"标题";
改变状态栏的方法
方法一:
1、plist
View controller-based status bar appearance 设置为 NO
2、代码设置
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
效果如下:
方法二:
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;
或者在控制器中重写 preferredStatusBarStyle方法,修改状态栏颜色
- (UIStatusBarStyle)preferredStatusBarStyle {
// return UIStatusBarStyleLightContent;
return UIStatusBarStyleDefault;
}
(二)设置statusBar的【背景部分】
背景部分,简单来说,就是背景色;改变方法有两种:
1、系统提供的方法
navigationBar的setBarTintColor接口,用此接口可改变statusBar的背景色
self.navigationController.navigationBar.barTintColor = [UIColor greenColor];
如果想将状态栏和导航栏字体全变为白色,这样就行
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
如果只想改变导航栏的字体颜色,可以这样
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]}];
还可以改变字体大小
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:25]}];
或者可以设置背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"image01"] forBarMetrics:UIBarMetricsDefault];
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];
另外图片透明处理
navigationBar为透明,注释掉self.edgesForExtendedLayout = 0;
// self.edgesForExtendedLayout = 0;
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]
self.navigationController.navigationBar.shadowImage = [UIImage new];
作者:致id
链接:http://www.jianshu.com/p/63f758796438
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
iOS 更改状态栏、导航栏颜色的几种方法的更多相关文章
- iOS 动态修改导航栏颜色 UINavigationBar
示例 所谓动态修改 意思是 在当前页面滚动的过程中 亦或 是在 触发返回事件\进入一个新的页面 导航栏的动态变化 由于系统级别的navBar 高度集成 很多自己想实现的功能 很不好弄 如果是通过 ...
- android: 获取屏幕高度和虚拟导航栏高度的几种方法
package com.yongdaimi.android.androidapitest; import android.app.Activity; import android.content.Co ...
- 【转】iOS中设置导航栏标题的字体颜色和大小
原文网址:http://www.360doc.com/content/15/0417/11/20919452_463847404.shtml iOS中设置导航栏标题的字体颜色和大小,有需要的朋友可以参 ...
- iOS中设置导航栏标题的字体颜色和大小
iOS中设置导航栏标题的字体颜色和大小,有需要的朋友可以参考下. 在平时开发项目的时候,难免会遇到修改导航栏字体大小和颜色的需求,一般使用自定义视图的方法,其实还存在一种方法. 方法一:(自定义视图的 ...
- IOS导航栏颜色渐变与常用属性
(转:http://www.cnblogs.com/Lingchen-start/archive/2015/10/23/4904361.html) 今年很忙,忙的写日志的时间都很少. 少的可怜. 自 ...
- IOS 导航栏颜色 标题
修改导航栏颜 #define COLOR_TOMATO [UIColor colorWithRed:255/255.0f green:99/255.0f blue:71/255.0f alpha ...
- iOS系统中导航栏的转场解决方案与最佳实践
背景 目前,开源社区和业界内已经存在一些 iOS 导航栏转场的解决方案,但对于历史包袱沉重的美团 App 而言,这些解决方案并不完美.有的方案不能满足复杂的页面跳转场景,有的方案迁移成本较大,为此我们 ...
- iOS frame从导航栏下面开始
iOS7.0 之后,页面布局默认延伸到了手机界面的边缘;导航栏背景成透明颜色. 解决fram从导航栏下面开始方法: 第一种: 将导航栏改成不透明即可 if( ([[[UIDevice currentD ...
- swift 自定义导航栏颜色
func setNavigationApperance(){ //自定义导航栏颜色 [self.navigationController?.navigationBar.barTintColor = U ...
随机推荐
- mac10.10 打造Python多版本虚拟环境
一.简介 1.在操作系统mac10.10(yosemite)中搭建Python多版本虚拟环境: 2.多版本虚拟环境包含三个含义: 在一个操作系统中安装多个版本的Python,不同版本可以随意切换,例如 ...
- 区分:AndroidDriver, iOSDriver, AppiumDriver and Remote WebDriver
区分:AndroidDriver, iOSDriver, AppiumDriver and Remote WebDriver 原文地址:https://discuss.appium.io/t/what ...
- RSA加密:利用模数和指数生成公钥加密
引子 目前做一款金融产品,由于涉及到资金安全,采用动态公钥的方式,即客户端每次登录服务端返回一个不同的XML串,由公钥的模数和指数构成,我需要用这个串生成公钥加密相关信息.服务端返回的XML串形如: ...
- 牛客练习赛14 D 比较月亮大小 【水】
链接:https://www.nowcoder.com/acm/contest/82/D 来源:牛客网 比较月亮大小 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其 ...
- Tomcat Session Clustering
搭建 Tomcat 集群需要解决很多的问题,其中之一就是要解决 Session 共享问题.小规模集群可以使用 Tomcat 提供的 Session Clustering 来解决. For the im ...
- jni native macOS
参考自:http://mrjoelkemp.com/2012/01/getting-started-with-jni-and-c-on-osx-lion/ 1 ,创建HelloWorld,如: 说明: ...
- 将PHP数组输出为HTML表格
1. [代码][PHP]代码 <?phpclass xtable{ private $tit,$arr,$fons,$sextra; public function __con ...
- [APIO 2014] 序列分割
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3675 [算法] 首先 , 我们发现将一段序列切成若干段所获得的收益与顺序无关 于是我 ...
- codevs 1147 排座椅
传送门 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接 ...
- bzoj4455
容斥原理+dp 首先考虑暴力做法,我们希望点和点一对一,那么自然要保存当前点集的状态,需要状压,据说要3^n,那么自然不行 考虑容斥原理,刚才一一对应的限制太强了,我们不要一一对应,只要满足边存在就行 ...