美文网首页ios新版本特性与适配iOSiOS进阶
iOS开发之顶部状态栏statusBar颜色变化小结

iOS开发之顶部状态栏statusBar颜色变化小结

作者: 华之曦 | 来源:发表于2016-03-25 18:31 被阅读37368次

在网上搜了一堆结果,没有一个全面总结的,太零碎,不符合需求,现在就整理最符合自己的小结。

1.单个视图View没有导航控制器包装的情况下

  • 默认情况下,启动状态栏和进入程序后的状态栏都是默认的颜色-黑色,如下图:
    默认情况.gif

1.只设置启动状态栏颜色改变(白色),而视图中状态栏不变化(默认黑色),做如下的设置即可,两种方式不管先设置哪一个,另一个都会相应的变化,如下图:

在General里面做的修改 Info.plist文件中生成的相应配置 只有启动栏颜色改变.gif

2.设置启动状态栏颜色改变(白色),视图中的状态栏也变成白色(保持上面的设置),有两种设置方式:

a.在Info.plist里面添加一行View controller-based status bar appearance = NO 即可,如下图:

在Info.plist里面设置

b.在视图控制器中添加代码,如下图:

在.m文件中添加代码

效果如下图:


启动和视图一起改变.gif

3.设置视图中状态栏的颜色为白色,启动程序时的状态栏为默认颜色(黑色),没有做1.中的任何设置情况下,在控制器.m文件中添加如下代码(即2.->b.图所示):
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
效果如下图:


只改变视图状态栏颜色.gif

2.视图作为导航控制器的根控制器的情况下

  • 在这种情况下,启动画面和视图的状态栏都是默认颜色(黑色),即使是在AppDelegate.m文件的didFinishLaunching的方法中添加下面代码:
    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    并且在视图控制器中添加如1.->2.->b.的图中的代码也是没有效果的。
各种无效果.gif

1.设置启动画面的状态栏为白色,视图中的状态栏为默认(黑色),如1.->1.中的设置即可,效果如下图:

导航栏包装的情况-1.gif
此时,如果想要视图的状态栏变为白色,不管是在AppDelegate.m文件中添加
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;同时在视图控制器中添加1.->2.->b.的图中的代码,都是然并卵,已测试。

2.设置启动画面和视图中的状态栏颜色都为白色(保持2.->1.中的设置),方式同样有两种:

a.在Info.plist里面添加一行View controller-based status bar appearance = NO 即可,如下图:

在Info.plist里面设置

b.此时如果单单在视图控制器.m文件中添加如下代码是不够的,
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
同时需要在导航控制器.m文件中添加下面的代码才能达到效果(careful)
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
}

如下图:


导航栏包装的情况-2.gif

2.只设置视图控制器状态栏颜色为白色,启动画面的状态栏为默认(黑色),把Info.plist文件中的 Status bar style = UIStatusBarStyleLightContent设置去掉,保持2.->2.->b.中的代码设置即可,效果如下图:

导航栏包装的情况-3.gif

3.小结

1.在AppDelegate.m文件中添加如下代码,没有一点儿毛用,
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
/[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];(被弃用)
2.目前所测试均为系统样式,不包含自定义的情况。
3.以上如有疏漏或错误的地方,忘及时沟通交流,尽快更正,不能传播误导信息。

4.补充

  • 要想在工程中启动和视图中的状态栏都是白色,用下面的方法简单配置下就行。
    1.设置Status Bar Style为Light.


    Info.plist文件中生成的相应配置

2.在plist文件中添加 View controller-based status bar appearance = NO。


在Info.plist里面设置

相关文章

网友评论

  • 愤怒的斧王:有没有什么办法,在不同设备上设置启动页状态栏字体的颜色。比如我想在iPhone上启动时设置成黑色,在iPad设置成白色
    华之曦:@愤怒的斧王 判断设备进行不同的显示。
  • Society2012:就你写的详细点
  • 小秀秀耶:好详细。6666
    华之曦:@小秀秀耶 多谢。
  • d7a38625eec9:看了很多文章 这篇确实帮助到我了 感谢
    华之曦:@d7a38625eec9 :smile:
  • ChardXu:厉害,纠结了我好几年的问题
    华之曦:@ChardXu :sweat_smile:
  • 海文_L:statusbar 默认被系统加粗了,请问怎么更改成正常的,对比了其他app是正常的
    海文_L:不太清楚,老项目遗留的锅
    华之曦:@海文_L 还有这情况?没见过呢,你是怎么设置的?
  • 老熊猫:发现一个简单方法,只要在viewWillAppear和viewWillDisappear 设置[UIApplication sharedApplication].statusBarStyle = XXX;就可以了,其中XXX分别替换成当前页面所要的颜色,和退出后所要的颜色。XXX:UIStatusBarStyleDefault/UIStatusBarStyleLightContent
    华之曦:@老熊猫 :+1:
  • 滴答大:请问楼主,模态回来怎么把状态栏改回白色?是从首页模态出去的
  • 码农淏:在系统自带app音乐里,状态栏是可以透视到壁纸的。。我当时着了好久好久都没辙
  • zero000:大神,我想问下设置app中状态栏默认为白色,单独设置某个控制器的状态栏为黑色,该怎么设置呢
  • 贱精先玍丶:楼主亲, 解答下
  • 贱精先玍丶:有四个界面. 2个界面status字体是白色, 2个是黑色, 我在白色控制器切换另一个白色控制器的话, status会变黑, 这是什么情况?
    贱精先玍丶:@华之曦 [self setupOneChildViewController:[[DCNavigationController alloc] initWithRootViewController:[[DCPaymentSuccessTableViewController alloc] init]] image:@"home" selectedImage:@"home_click" title:@"home"];
    [self setupOneChildViewController:[[DCNavigationController alloc] initWithRootViewController:[[DCMeTableViewController alloc] init]] image:@"me" selectedImage:@"me_click" title:@"me"]; 这样创建的
    贱精先玍丶:@华之曦 好像不是
    华之曦:@贱精先玍丶 两个白色的是在同一个navigation 里面切换的吗?
  • 烈霸南绝:ios10 没效果怎么回事呢?
    华之曦:哪种情况?
  • 我不是杰迷:在公司的项目里面还遇到了在plist里面 UIViewControllerBasedStatusBarAppearance 起作用,View controller-based status bar appearance 不起作用,UIStatusBarStyle 起作用,Status Bar Style 不起作用的情况,
    华之曦:建议,自己写一个小Demo试试,这几种情形会好一些。
  • 热血足球2016:- (UIViewController *)childViewControllerForStatusBarStyle{
    return self.topViewController;
    }

    self.topViewController报错
    华之曦:@热血足球2016 http://www.jianshu.com/p/4196d7cf95f4,看这个是否能解决你的问题。
    热血足球2016: @华之曦 就是自己控制每个vc的导航栏的颜色,文字,隐藏, 我想让有的是白色,有的是黑色有的要隐藏
    华之曦:你想要哪种效果?
  • 吴德馨:博主,比如我要除了登录界面外所有的界面都显示白色 status, 而其他界面是通过 tabbarVC>navigationVC>VC 这种形式加载的.然后我试了该文章2.2.b 的方法,结果是除了第一个 navigationVC 的 status 为白色,其余 navigationVC 的 status 都依然是黑色. 希望解答!
    _後知後覺_:你补充的在Info.plist设置两个方法我都试了,为什么还是没反应啊,还是全黑的
    华之曦:@请问一个月 ChenJZ的回复,你看下,是否能解决你的问题。
    吴德馨:@请问一个月 额,我自己刚刚用一个比较简单粗暴的方式解决了
  • 乌鸦白:很详细··· 6666 帮到大忙了
    华之曦: @乌鸦白 😛😛
  • 甲丁乙_:请问启动画面隐藏,单个导航控制器的自控制器的状态栏为白色怎么设置?
  • FingertipFish:没有设置过状态栏 但是在某个Vc里面状态栏是白色的 prefer方法里面设置无效是什么原因
    RiberWang:@FingertipFish 解决了吗 大神
    FingertipFish:@华之曦 设置过了 但是没有效果 谢谢亲~
    华之曦: @花色Fingertip 应该是plist文件里面没有设置,
  • 桔呢:状态栏一直是白的
    华之曦:@奥莉奥莉 不就有两种颜色可选么,和下面背景一个颜色是什么意思,没懂呀。
    桔呢:@华之曦 和下面的背景是一个颜色
    华之曦:@奥莉奥莉 你想要哪种状态呢?
  • ChenJZ:好详细!!谢谢
    ChenJZ:@ChenJZ 今天重新看了,自已总结一下:Status bar Style控制着整个App的 status样式。如果想单独控制某个View的StatusBar就把 View controller-based status bar appearance改为YES,前在ViewController里面重写preferredStatusBarStyle。
    ChenJZ:@Huazhixi 期待更新 :smile:
    华之曦: @ChenJZ 不谢不谢,有个地方有疏漏,有空在更新了。
  • 余温夏暖:博主真棒棒!
    华之曦:@余温下暖 有些地方需要修改,有时间再更新了。
  • QinChBeSt:状态栏根据背景·自动判断黑白 ,怎么做`
    Ego_1973:@QinChBeSt 你实现了吗?求解答
    Ego_1973:@华之曦 不是啊,有的可能是白色,有的可能是主色调
    华之曦:@QinChBeSt auto有些困难吧,一般的情况下导航栏的主题色调应该保持一致的,你觉得呢?
  • 794f64d7a292:。。。
    华之曦:@CoderBBen 欢迎指正

本文标题:iOS开发之顶部状态栏statusBar颜色变化小结

本文链接:https://www.haomeiwen.com/subject/ararlttx.html