文档章节

IOS 7 和 IOS 8 保证状态来统一的风格

OSMaker_-
 OSMaker_-
发布于 2015/06/20 16:47
字数 702
阅读 15
收藏 0
点赞 0
评论 0

第一种方法:

1、在info.plist文件中将View controller-based status bar appearance设置为YES,或者不设置,因为它默认为YES;注意:如果将它设置为NO时,下面的步骤将不起作用。

2、在UIViewController中覆写- (UIStatusBarStyle)preferredStatusBarStyle方法,返回UIStatusBarStyleLightContent或UIStatusBarStyleDefault即可。

/*

 状态栏的管理:

 1> iOS7之前:UIApplication

 2> iOS7开始:交给对应的控制器去管理

 */

在IOS 7之前由于状态栏是有UIApplication 来管理的,所以在入口类中写入如下code就可以实现对应的效果。

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;即状态栏字体颜色为白色;
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;即状态栏字体颜色为黑色

在IOS 7之后我们通过2中描述的方法是无法改变statusBarStyle,因为苹果开始了全屏的原因不让UIApplication来管理statusBarStyle,从而改为让Controller来管理,所以苹果为Controller提供了如下方法来管理。

- (UIStatusBarStyle)preferredStatusBarStyle
{
    // 白色样式
    return UIStatusBarStyleLightContent;
}
- (BOOL)prefersStatusBarHidden
{
    return NO;
}

优缺点:这种方法设置的优点是设置一次之后就不需要再设置。不过,这个也是它的缺点,对于要求状态栏字体颜色不同的场景,只能选择第二种方法。

优缺点:优点是灵活,基本上可以满足所有需求,建议使用此方法进行设置。可以定义一个BaseViewController和BaseNavigationController,然后在它们里面覆写- (UIStatusBarStyle)preferredStatusBarStyle方法,返回UIStatusBarStyleDefault或UIStatusBarStyleLightContent作为主体风格,在个别不同需求的控制器覆写此方法即可。

最近在做公司一个产品精细化,如果大家在项目中 "个人中心"(个人资料)中需要上传头像调用了系统的UIImagePickerController控件,大家会发现导航条都是默认的风格没有和整个项目中的风格完全不一致。这时候大家可以参考下如下代码:

-(void)showImagePickerWithSourceType:(UIImagePickerControllerSourceType)sourceType
{
    UIImagePickerController *imgPickerController = [[UIImagePickerController alloc] init];
    [[imgPickerController navigationBar] setTintColor:[UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1]];
    [[imgPickerController navigationBar] setBackgroundImage:[UIImage themeNavBg] forBarMetrics:UIBarMetricsDefault];
    imgPickerController.allowsEditing = YES;
    imgPickerController.delegate = self;
    imgPickerController.sourceType = sourceType;
    
    [self presentViewController:imgPickerController animated:YES completion:nil];
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    for (UINavigationItem *item in navigationController.navigationBar.subviews)
    {
        if ([item isKindOfClass:[UIButton class]]&&([item.title isEqualToString:@"取消"]||[item.title isEqualToString:@"Cancel"]))
        {
            UIButton *button = (UIButton *)item;
            [button setTitleEdgeInsets:UIEdgeInsetsMake(0, -20, 0, 0)];
        }
    }
    [[UIApplication  sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication  sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}


最后,遇到的问题总结总结:

1、若是在控制器覆写了-(UIStatusBarStyle)preferredStatusBarStyle方法,却发现没有作用,查看是否info.plist文件中将View controller-based status bar appearance设置为NO了。

2、当ViewController在UINavigationController中时,如果导航栏存在,则以UINavigationController中-(UIStatusBarStyle)preferredStatusBarStyle返回风格为标准;如果导航栏隐藏了,则以控制器中返回的风格为标准。

3、在iOS8中,UIStatusBarStyleBlackTranslucent与UIStatusBarStyleBlackOpaque相当于UIStatusBarStyleLightContent。



© 著作权归作者所有

共有 人打赏支持
OSMaker_-
粉丝 0
博文 38
码字总数 6775
作品 0
郑州
程序员
定制iOS 7中的导航栏和状态栏

由于种种原因,申请了一个开源中国的帐号,也许会由于我的不耐心,不会亲自去一步步的写博文,但准备把自己看到的好的,都转载过来,就当时资源的存储,也算是一种推广吧。 iOS 7 教程:定制...

谁家的阿毛
2013/11/21
0
0
在Android中自定义IOS风格的按钮

IOS风格的UI比较流行,很多Android的UI设计者也愿意将Android的UI设计成类似IOS系统的UI风格。下面是一个例子,说明如何使用Shape来定义一个IOS风格的按钮。 定义一个iosbuttongrouped.xml。...

迷途d书童
2012/03/21
0
0
学习如何针对iOS 7进行开发?

  iOS 7已经发布了六个测试版,除了beta 6进行了小幅修正外,其他几个测试版都有不小的改动。昨天有消息说苹果将在9月10日发布iOS 7正式版,那么GM版很快将会与开发者见面。在iOS 7来临前夕...

fangzhou99
2013/09/17
0
0
iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码

iOS精选源码 iOS 精美过度动画源码(http://www.code4app.com/thread-14827-1-1.html) iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路(http://www.code4app.com/thread-30348-1-1.htm...

sunnyaigd
07/11
0
0
iOS 7:用代码解决视图控制器的View整体上移问题

如果你准备将你的老的 iOS 6 app 迁移到 iOS 7 上,那么你必须注意了。当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态...

mingxun
2014/06/09
0
0
c++ cout格式化输出函数详解

这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切...

lieefu
2015/10/30
0
0
C++ Primer Plus(十七)——输入、输出和文件

cerr和clog对象与标准错误流对应,但cerr不被缓冲。 2. streambuf类为缓冲区提供了内存,并提供了用于填充缓冲区、访问缓冲区内容、刷新缓冲区和管理缓冲区内存的类方法。iosbase类表示流的一...

吃一堑消化不良
2017/11/04
0
0
10个优秀Objective-C和iOS开发在线视频教程

如果你自己开发iOS应用,你肯定会发现网上有很多资源。学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写。我们从海量视频和学习网站中整理出了我们认为...

mingxun
2014/05/09
0
0
iOS股票K线图、校园助手、适配iPhone X、版本检测等源码

iOS精选源码 快速创建menuItem控件 YHPhotoBrowser 优化的网络图片浏览 cocoaAsynSocket demo (包含客户端和服务端) SwipeMenuViewController现在支持iPhoneX和Swift4。 仿微信的提醒对话框 ...

sunnyaigd
2017/10/31
0
0
iOS 终于支持了 PWA,一起来认识一下这个强化版「小程序」 | 科普

iOS 终于支持了 PWA,一起来认识一下这个强化版「小程序」 | 科普 发布于 2018-04-13 文章被以下专栏收录

少数派
07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java集合元素的默认大小

当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使...

竹叶青出于蓝
6分钟前
1
0
Java快速开发平台,JEECG 3.7.7闪电版本发布,增加多套主流UI代码生成器模板

JEECG 3.7.7 闪电版本发布,提供5套主流UI代码生成器模板 导读 ⊙平台性能优化,速度闪电般提升 ⊙提供5套新的主流UI代码生成器模板(Bootstrap表单+BootstrapTable列表\ ElementUI列表表单)...

Jeecg
10分钟前
0
0
export 和 module.export 的区别

在浏览器端 js 里面,为了解决各模块变量冲突等问题,往往借助于 js 的闭包把左右模块相关的代码都包装在一个匿名函数里。而 Nodejs 编写模块相当的自由,开发者只需要关注 require,exports,...

孟飞阳
12分钟前
0
0
技术教育的兴起

技术教育的兴起 作者: 阮一峰 1、 有一年,我在台湾环岛旅行。 花莲的海边,我遇到一对台湾青年夫妻,带着女儿在海滩上玩。我们聊了起来。 当时,我还在高校当老师。他们问我,是否觉得台湾...

吕伯文
12分钟前
0
0
Linux服务器下的HTTP抓包分析

说到抓包分析,最简单的办法莫过于在客户端直接安装一个Wireshark或者Fiddler了,但是有时候由于客户端开发人员(可能是第三方)知识欠缺或者其它一些原因,无法顺利的在客户端进行抓包分析,...

mylxsw
17分钟前
0
0
mybatis3-javaapi

sqlSessionFactoryBuilder->sqlSessionFactory->sqlSession<-rowbound<-resultHandler myBatis uses a Java enumeration wrapper for transaction isolation levels, called TransactionIsol......

writeademo
20分钟前
0
0
Java NIO:浅析I/O模型

也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念...

yzbty23
20分钟前
0
0
了解iOS消息推送一文就够:史上最全iOS Push技术详解

本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表。 1、引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ、微信等IM界面处于前台时,聊天消息和指令都会...

JackJiang-
22分钟前
0
0
Mysql汉子转拼音

update t_app_city SET CITY_NAME_BEGIN = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(CITY_NAME USING gbk),1)),16,10), 0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7, 0xBFA......

尘叙缘
24分钟前
0
0
大数据构建智慧城市“新引擎”,加速推进新旧动能转换

——“大数据与智慧城市”技术交流分享会——济南站召开 7月13日,“大数据携手智慧城市,助力山东新旧动能转换”技术交流分享会——济南站在山东信息通信技术研究院会议室成功举办,此次会议...

左手的倒影
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部