iOS结合导航栏的状态栏字体颜色设置
来源:互联网 发布:汽车行业的会计 知乎 编辑:程序博客网 时间:2024/05/21 03:29
本文仅提供大家参考与交流,可能会有一些错误,欢迎大家指正。Xcode版本6.3.2。
在学习iOS开发的过程中,我经常会去看一些手机上的APP,看看它们的功能和布局效果。最近在做一个电影资讯项目,项目基本都带有NavigationController ,导航栏一般很少使用系统自带的,要协调好状态栏的字体颜色和导航栏的背景颜色。我看了很多APP的状态栏颜色变化,一般跳转到偏白色界面都是黑色字体的状态栏,其他颜色都是白色字体的状态栏。状态栏字体的颜色也就这两种,这个可以查看帮助文档:
typedef NS_ENUM(NSInteger, UIStatusBarStyle) { UIStatusBarStyleDefault = 0, // Dark content, for use on light backgrounds黑色内容,应用于亮色的背景 UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds亮色内容(其实就是白色),用于暗色背景 UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1, UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,//这两个样式在iOS7以后不推荐使用了,建议使用UIStatusBarStyleLightContent,也就是第二种白色样式};
几种比较常用的设置状态栏的方法
1.iOS7之前采用的方法
UIApplication对象设置(需要更改plist文件中View controller-based status bar appearance选项设置为NO,默认为YES)
第一步就是取plist中把这个选项改成NO,我知道这一大串东西根本记不住!找到Supporting Files->info.plist,右键后选Add Row 就会出现第二个页面,它会提供很多属性,一直往下,最后一个就是View controller-based status bar appearance,这样就不用记这个东西了。
当然改完这个后,你会发现并没有什么卵用。还需设置UIApplication对象,具体代码如下:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//设置状态栏字体为白色 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];//设置状态栏字体为黑色
根据本人多次试验,发现这是一个极其简单粗暴的方法。一但写了这个语句,它会把整个APP的状态栏颜色都改变。如在子控制器中写了这个设置白色字体的方法,当你返回上一级控制器或者主控制器时会发现状态栏也变成了白色。
如图所示,起始状态都是第①种,一旦在sub1中设置状态栏为白色,其实本质是把整个APP的状态栏都设置了白色,如②所示。
如果不想改变第一级控制器的状态栏颜色,可以在返回第一级控制器的时候,写上
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];//设置状态栏字体为黑色 NSLog(@"视图将要出现");}
这样就实现了③的效果,其实本质就是将整个APP 的颜色按照显示的页面来改变。
2.iOS7以后采用的方法
在试图控制器中重写- (UIStatusBarStyle)preferredStatusBarStyle方法。该方法返回是一个UIStatusBarStyle,只要重写该方法,当前视图控制器的状态栏颜色就会改变,例如模态视图。
这个方法看似简单,但是要想在导航控制器中使用,还是要注意很多细节。因为很多APP的中都是有导航栏的,这也是导航栏跟状态栏一起讲解的原因。
先简单介绍一下UINavigationController,刚接触这个的时候,都是大概能懂,大概能用,真的要融会贯通还是有很大的难度。
一个导航控制器,只有一个NavigationBar,注意,是一个!!我刚开始学的时候也不理解,这里我用分级来讲一下导航控制器。首先由NavigationController创建的视图肯定是第一级,后面可以通过 push操作进入下一级,我们经常发现,第一级和第二级的导航栏明明不一样,上面的按钮和标题都不一样,怎么可能是同一个导航栏?
上图中很好的阐述了为什么导航栏会不一样,如果是在同一个导航控制器种的,那么导航栏就只有一个,不同的只是UINavigationItem,以及标题,和对应的UIViewController。
那么要通过- (UIStatusBarStyle)preferredStatusBarStyle方法能不能设置同一个NavigationController里的不同的UIViewController的状态栏字体颜色呢,答案是不能!这个跟第一种“iOS7以前的方法”类似,要么全部改变,要么不改变,所以想达到设置不同的状态栏字体颜色的效果,要在返回到上一级视图时再次设置回原来的状态栏。
其实一般也没这么麻烦,同一个NavigationController就是同一个NavigationBar,的同一个导航栏的背景是固定的(如果你还想要设置不同的状态栏,建议再去开辟一个新的NavigationController,别再同一个里面,好乱~@_@)。比如我的状态栏背景图片是黑色的(微信),蓝色的(QQ),微博(白色),很少会变的。
直接在子控制器中调用这个方法是无效的。在哪里调用- (UIStatusBarStyle)preferredStatusBarStyle方法成了关键问题,肯定是在子类化UINavigationController中的导航控制器中调用,这样就OK了。
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent;}
3.设置导航栏的背景颜色来改变
前两种方法是可以不通过导航栏来设置状态栏字体颜色。这里介绍的这个方法也是简单粗暴,同样是在同一个UINavigationController中,
self.navigationController.navigationBar.barStyle = UIBarStyleBlack
这条代码的意思是:将当前的导航控制器的导航栏的导航栏风格 设置为 黑色风格。关于导航栏的风格其实也就两种:
typedef NS_ENUM(NSInteger, UIBarStyle) { UIBarStyleDefault = 0,//默认是这种,就是有点白色的 UIBarStyleBlack = 1,//黑色 UIBarStyleBlackOpaque = 1, // Deprecated. Use UIBarStyleBlack 不建议使用 UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES 不建议使用};
设置导航栏风格苹果还是挺人性化的,你既然把我的导航栏设置成黑色,我状态栏默认也是黑色,那不行,你得帮我把状态栏改成白色。大笑 这个语句在子控制器中也可以调用,只要调的到navigationBar的地方都可以修改。还是跟以前的一样,要么不改,要么就把状态栏都改了,其实这句话本身也有问题,因为导航栏和导航控制器本来就只有一个,无所谓改全部还是改单个。再次强调一遍,导航栏只有一个!!!!
关于跟导航栏相关的状态栏字体颜色设定就讲到这里,总结一下这三种方法:
第一种:要设置plist,设置完后还要写代码,略麻烦。
第二种:比较实用,毕竟是iOS7以后的新方法,虽然可以在任何UIViewController用在导航控制器的时候要注意必须写在导航控制器中。
第三种:很简单粗暴,不会影响导航栏添加背景图片。
其中肯定有很多的不足,望大家去其糟粕,取其精华(也没有啥精华~),谢谢!
- iOS结合导航栏的状态栏字体颜色设置
- iOS设置导航栏颜色以及状态栏字体颜色
- 设置状态栏字体颜色;设置导航栏返回按钮的title和返回按钮的颜色
- iOS设置状态栏和导航栏颜色
- IOS导航栏、状态栏颜色设置
- ios9设置导航状态栏的字体颜色设置
- ios9设置导航状态栏的字体颜色设置
- iOS导航栏隐藏的情况下设置状态栏颜色
- iOS设置状态栏字体颜色
- 状态栏 导航栏 tabbar背景色&字体颜色设置
- 导航栏和状态栏的颜色设置
- 改变iOS中的导航栏和状态栏 的背景色和字体颜色
- 设置状态栏的字体颜色
- IOS开发之设置导航栏字体和字体颜色
- iOS 设置导航栏背景颜色,字体颜色
- iOS-设置状态栏字体颜色的两种方案
- iOS 状态栏隐藏与字体颜色设置
- ios 设置状态栏字体颜色为白色
- 屏幕适配
- 液晶12864(KS0108主控)
- UIView 的生命循环周期
- Request获取url信息以及url带的参数
- 1.10
- iOS结合导航栏的状态栏字体颜色设置
- scrapy爬虫起步(5)--又一个多页面抓取的方法
- 新GRE数学词汇不认识如何解题
- sqlserver获取年份。
- 操作系统堆栈的那些事
- Git报错:index.lock File exists
- rb 选择器
- JS垮浏览器取得页面视口的大小
- Java IO: 管道