文档章节

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
iOS 8 普及率达到 82%,Android 5.0 只有 1.6%

根据苹果为开发者提供的 App Store 支持页面,公司最新的移动操作系统,iOS 8 ,目前已经被72%的 iOS 设备安装。iOS 8 在2014年9月发布,至今过去了5个月。 安装普及率比去年12月中旬增加了9...

oschina
2015/02/04
3.8K
45
iOS 7 应用开发者需要注意的五件事

据国外媒体报道,苹果在 今年早些时候的“全球开发者大会”(WWDC)已经明确表示将在今年秋天发布旗下全新移动操作系统iOS 7,这一版本的iOS将完全摒弃过去的“拟物”设计风格,并开始采用实...

oschina
2013/08/13
2.2K
3
传 iOS 7 采用扁平化设计:颠覆拟物理念

据美国科技博客9to5Mac报道,多位亲眼见过或大致了解新一代iOS 7操作系统的人士透露,这款系统将对用户界面进行重新设计,虽然可能会吸引新的iOS用户,但却有可能导致已经习惯旧界面的老用户...

oschina
2013/05/01
4.6K
15
苹果iOS的八年:如何一步步爬到了这么高

电脑需要操作系统,手机也需要,2007 年,苹果带着旗下第一款智能手机 iPhone 和第一款操作系统亮相,从而奠定了改变世界的基础。8 年时间以来,iPhone 一直在不停的进化、演变,iOS 操作系统...

oschina
2015/09/08
4K
22

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
49分钟前
1
0
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
7
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
10
0
Mac Vim配置

1.升级 vim   我自己 MacBook Pro 的系统还是 10.11 ,其自带的 vim 版本为 7.3 ,我们将其升至最新版: 使用 homebrew : brew install vim --with-lua --with-override-system-vim 这将下...

Pasenger
昨天
9
0
vmware安装Ubuntu上不了网?上网了安装不了net-tools,无法执行ifconfig?

1.重新设置网络适配器还是不行,如下指定nat 2.还需要指定共享网络,我是在无线环境下 3.无法执行ifconfig https://packages.ubuntu.com/bionic/net-tools到这个网站下载net-tools的deb文件...

noob_chr
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部