statusBar前景设置

一般情况下一个app的navigationBar样式很固定,只有一种或者最多两三种样式;一方面一个app应该有一个自己的风格,另一方面自定义navigationBar样式需要不少时间,不同样式的navigationBar页面跳转时容易出现问题;

如果你们app的navigationBar样式有很多种,那么一种情况是app的功能模块比较多,不同模块的风格不同;另一种情况是你们公司的产品和UI在联合装逼,想把app做的花里胡哨,这种产品和UI水平一般不高(没错我就是在抱怨😂,说产品坏话);

iOS的statusBar样式设计到两个概念

  • 前景部分(运营商、电池电量等文字或者图标颜色)
  • 背景部分(背景)
    新建项目默认启动页的状态栏文字为白色,启动之后变为黑色,如果这正是你需要的样式,那么恭喜你,省事儿了。
    iOS7之后状态栏颜色有两种
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,
} __TVOS_PROHIBITED;
  • UIStatusBarStyleDefault(默认黑色)
  • UIStatusBarStyleLightContent(白色)

设置所有页面的状态栏颜色为白色/黑色(包括启动页)

如果app中只有一种风格,我们需要统一设置;
首先在info.plist中新增View controller-based status bar appearance并设置为NO

View controller-based status bar appearance项设为YES,则View controller对status bar的设置优先级高于application的设置。为NO则以application的设置为准,view controller的prefersStatusBarHidden、preferredStatusBarStyle方法无效,是根本不会被调用的。

  1. 设置general->status bar style 为Light(白色)/default(黑色)(info中设置也一样)
  2. 或者在didFinishLaunchingWithOptions方法中[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;这种优先级更高

页面中改变statusBar的文字颜色

同样需要View controller-based status bar appearance设置为YES(默认就是YES)
在controller中重写方法

-(UIStatusBarStyle)preferredStatusBarStyle
{
   // return UIStatusBarStyleDefault;//黑色
    return UIStatusBarStyleLightContent;//白色
}

什么??????????preferredStatusBarStyle方法不执行,那么可能需要在导航控制器中重写两个方法

-(UIViewController *)childViewControllerForStatusBarHidden
{
    return self.topViewController;
}

-(UIViewController *)childViewControllerForStatusBarStyle
{
    return self.topViewController;
}

可以使用setNeedsStatusBarAppearanceUpdate触发preferredStatusBarStyle 和prefersStatusBarHidden


- (void)btnDidClicked:(UIButton *)btn {
    self.isWhite = !self.isWhite;
    [self setNeedsStatusBarAppearanceUpdate];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,334评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,241评论 4 61
  • 墨染江湖(1)初入江湖 现场发生了意外后,气氛很压抑,陈晨导演交代完后又不知道去哪里了, 别的群演们演完角色就领钱...
    爱学习的荔枝阅读 256评论 0 4
  • 错过了天黑之前的约定,我最终没能见到你。 我记得黄昏时天色很好,窗外的草原染上了秋的颜色,少了肆意的葱绿,多了一份...
    三水林枫阅读 439评论 16 16
  • 【2017年11月28日-007-19】 ——读《怎样选择成长股》每周小结week1 本周读了菲利普.费舍的《怎样...
    dream2024阅读 615评论 0 2