互联网科技

修改状态栏的文字颜色和背景色

作者:金沙国际官网    发布时间:2020-04-05 15:27     浏览次数 :152

[返回]

码代码到现在,刚刚做了个小需求,根据偏移量动态修改状态栏的颜色。刚开始我是这样想的,根据偏移量,直接修改状态栏的颜色就好了。于是,便有了下面的代码。

一.修改状态栏文字颜色

前些天产品汪找到我,滑动着nice的首页,跟我说:“小新!能否实现像nice这样的,上滑让导航栏消失,下滑让导航栏显示”。“完全可以,一行代码的事儿”我自信的回答。因为网上一搜:怎么像safari一样滑动的时候隐藏navigation bar?都会告诉你一行代码就搞定。这一行代码就是:

- scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y <= -20) { self.navigationController.navigationBar.barStyle = UIStatusBarStyleDefault; } else { self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent; }}

这里修改文字颜色分两种情况

navigationController.hidesBarsOnSwipe = Yes

写完一运行,貌似并没有起作用啊。谷歌上百度了一下,没有看到相关动态修改状态栏颜色的东西,有可能是手法不对。还有就是这个问题太low,没有人问过。想了一下,其实最主要的还是修改状态栏的颜色。可能因为每个项目自身的一些情况,修改状态栏颜色的方法不一定都起作用。接下来我定义了一个全局的属性记录偏移量,然后在滚动的代理方法中赋值并且调用UIViewController- setNeedsStatusBarAppearanceUpdate方法。然后重写系统的- (UIStatusBarStyle)preferredStatusBarStyle方法。在这个方法中去改变状态栏的颜色。代码如下:

(1)导航栏是隐藏状态

如果导航栏为隐藏状态 可以直接在控制器中重写如下方法

// 重写方法 状态栏白色
- (UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}

这样状态栏的文字就可以变成白色了

当然这句代码确实可以实现这个效果,我马上让产品汪看,想显示自己的能力,结果产品汪说:“是不是状态栏没有背景?状态栏不应该是透明的”。仔细对比发现:nice的状态栏不仅有个背景,而且它们navigationBar消失的时候是从状态栏显示的时间下面经过的。直接使用navigationController.hidesBarsOnSwipe = Yes的效果图如下:

- scrollViewDidScroll:(UIScrollView *)scrollView { self.offset = scrollView.contentOffset.y; [self setNeedsStatusBarAppearanceUpdate];}- (UIStatusBarStyle)preferredStatusBarStyle { if (self.offset <= -20) { return UIStatusBarStyleDefault; } return UIStatusBarStyleLightContent;}- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { return UIStatusBarAnimationFade;}

(2)导航栏不是隐藏状态

如果导航栏不是隐藏状态 会发现方法(1)没有作用了
这时要采用第二种方法, 一共有两个步骤
1 -> 设置info.plist 字段 View controller-based status bar appearance 为NO (如果没有此字段 请添加)
2 -> 在代码中写上如下代码

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

如果你做了上面两个步骤且操作没有错误的话 就会发现状态栏文字变为了白色

图片 13F862048-EB43-489F-8D52-13B8988B04E8.png

如果不是经过导航栏包装的控制器的话,到这里就可以实现根据偏移量修改状态栏的颜色了。如果你的控制器是经过导航控制器包装的,你需要自定义一个导航控制器继承自UINavigationController,重写- (UIViewController *)childViewControllerForStatusBarStyle方法

二.修改状态栏背景颜色

 // 隐藏导航栏
    self.navigationController.navigationBarHidden = YES;
    // 修改状态栏颜色
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)])
    {
        statusBar.backgroundColor = getColor(mainColor);
    }

 

nice的效果图如下:

上一篇:没有了
下一篇:没有了