文档章节

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

OSMaker_-
 OSMaker_-
发布于 2015/06/20 16:47
字数 702
阅读 15
收藏 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
HTML 移动端框架 - Framework7

Framework7 或者叫 F7 是全功能的绑定 iOS 7 应用的 HTML 框架。Framework7 是免费开源的 HTML 移动端框架,用来开发混合移动端应用或者 iOS 7 的 Web 应用,并且带有 iOS 7 的原生外观和感觉...

匿名
2014/07/24
0
5

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
1
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
7
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
3
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部