iOS控件:状态栏
来源:互联网 发布:蔡仕伟淘宝 编辑:程序博客网 时间:2024/05/20 21:46
由于iOS 7 SDK较早期版本的SDK改动较大,因此App的界面也会出现种种问题,其中最明显的问题就是状态栏与导航栏的显示问题。
一、状态栏
iOS 6:
iOS7:
当未使用导航栏时,上面的截图对比了在iOS 6与iOS 7上的显示情况。iOS 6中的状态栏不透明,视图控制器的主视图原点在状态栏下面。而iOS 7的状态栏背景色变为透明色,视图控制器的主视图原点在屏幕左上角,即状态栏显示在主视图之上,透过状态栏可以显示视图的内容。
如下图将视图的坐标设置为CGRectMake(0,0,300,40)的效果如下
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, };
如果状态栏背景为浅色,应选用黑色字样式(UIStatusBarStyleDefault,默认值);如果背景为深色,则选用白色字样式(UIStatusBarStyleLightContent)。
二、隐藏状态栏
iOS7之前和iOS之后隐藏状态栏的方法是不同的。
第一种:
iOS7之前使用:
//iOS7以下版本隐藏UIStatusBar的方法: [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; //PS: //UIStatusBarAnimationNone //没有动画效果 //UIStatusBarAnimationFade //淡出 //UIStatusBarAnimationSlide //滑动
iOS7及之后使用:
PS:这里需要说明的是:
1、控制器不在导航栈或者在导航栈但导航条隐藏的状态下,下面的两个方法才会都被调用,
2、在导航栈有导航条的时候只有prefersStatusBarHidder方法会调用,preferredStatusBarStyle不会调用
总结一下就是有导航条preferredStatusBarStyle不调用,没有导航条preferredStatusBarStyle调用。
思考:怎么再有导航条的情况下改变状态栏的UIStatusBarStyle呢?
//升级到iOS7后的方法://在基类中重载UIViewController.h中的这个方法:-(BOOL)prefersStatusBarHidden{ return NO;}//可同时重载此方法来设置状态栏的样式-(UIStatusBarStyle)preferredStatusBarStyle{// UIStatusBarStyleDefault//黑色// UIStatusBarStyleLightContent//白色// UIStatusBarStyleBlackTranslucent// UIStatusBarStyleBlackOpaque return UIStatusBarStyleDefault;}
PS:在需要适配iOS7之前和iOS7及之后的版本,需要对系统版本做判断并选择不同的方法。
第二种:
另外一种方法是改变info.plist文件内容来达到设置状态栏是否隐藏如下图
info.plist文件中,
View controller-based status bar appearance项设为NO, 则以application的设置为准,view controller的prefersStatusBarHidden方法无效,是根本不会被调用的。
View controller-based status bar appearance项设为YES,则以View controller的prefersStatusBarHidden为准,application的设置无效,不会调用。
如果想要兼容iOS7之前、iOS7及之后:
View controller-based status bar appearance项设为NO,并用application来设置即可
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];//隐藏状态栏
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];//状态栏存在条件下,改变字体颜色
PS:通过此种方法,不管导航条是否存在,都能够改变状态栏的字体颜色
思考:View controller-based status bar appearance项设为YES 且有导航条的条件下,如何改变状态栏的字体颜色?
暂时还没找到方法。
参考文章:
1、 控制iOS 7中的状态栏
2、 iOS7下隐藏statusbar
3、 UINavgationController中覆写preferredStatusBarStyle方法不执行的问题 文章中改变状态栏颜色的方法有问题。
4、 iOS如何把所有界面的状态栏的字体颜色都设置为白色
- iOS控件:状态栏
- iOS:状态栏提示控件的实现原理
- IOS状态栏
- IOS状态栏
- IOS状态栏
- iOS状态栏
- iOS状态栏
- 状态栏iOS
- IOS 状态栏
- iOS开发系列之常用自定义控件开发集—自定义状态栏消息提示控件开发
- CStatusBarCtrl 状态栏控件
- QT控件之状态栏
- IOS: 状态栏提示控件的实现原理UIWindowLevel详解关于UIWindow的一点儿思考
- 操纵状态栏-IOS开发
- 自定义iOS的状态栏
- 修改 ios 状态栏
- ios 状态栏 外观设置
- 修改 ios 状态栏
- Android无线调试程序
- HDU1571
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- listview 中出现的ArrayIndexOutOfBoundsException
- jzoj 4710. 【NOIP2016提高A组模拟8.17】Value 贪心+动态规划
- iOS控件:状态栏
- leetcode-java-110. Balanced Binary Tree
- 设计模式-状态模式
- 验证数学黑洞 ,用户输入一个四位数,输出变换到6174的过程
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- LA 7457 Discrete Logarithm Problem(shank的大步小布算法)
- velociyt判断变量是否为null
- Linux修改默认系统启动级别为命令行模式
- 学编程的都是疯子!!!