美文网首页iOSiOS学习笔记iOS开发者
iOS动态修改状态栏的颜色

iOS动态修改状态栏的颜色

作者: 浪漫恋星空 | 来源:发表于2017-04-27 23:34 被阅读1872次

根据偏移量,动态修改状态栏的颜色

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

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

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

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
    self.offset = scrollView.contentOffset.y;
    
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    
    if (self.offset <= -20) {
        
        return UIStatusBarStyleDefault;
    }
    
    return UIStatusBarStyleLightContent;
}

- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {

    return UIStatusBarAnimationFade;
}

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

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

让状态栏的颜色由控制器自己去决定。

虽然都是一些简单的小东西,在日常开发中也不太会注意这些细节。遇到了就记下来,希望能帮助到需要的人。也加深自己的印象。写完收工。睡醒了再继续coding。。。最后补一张效果图就滚去睡觉了!

效果图.gif

如果在阅读的过程中有任何疑问或者你有更好的建议,欢迎留言指出,交流学习。

相关文章

网友评论

  • 指尖猿:很不错,nice!
  • 陪妮走未来:用了你的方法也不行啊
  • 16哥哥:大神你好,能给一个demo参考一下吗,我这边设置不起作用
  • DeveloperTang:楼主 有demo不 求发一份demo qq 1779129021
    指尖猿:@浪漫恋星空 重点是这个:setNeedsStatusBarAppearanceUpdate
    浪漫恋星空:@SilenceEndure 这边所有的代码都在这里了…
  • 背包客_5642:我就佩服你写的好东西!
    浪漫恋星空:@背包客_5642 感谢支持…
  • paintingStyle:怎么把状态栏的背景设置为自定义颜色,不只黑白两种
    乐乐的熊:有导航控制器就设置导航控制器的barTintColor,只有viewController的话就设置self.view.backgroundColor.将下面的和状态栏颜色设置不一样就可以了。
    any_where:@思念旦暮未歇 自己自定义一个20高的view贴在status上面
    浪漫恋星空:@思念旦暮未歇 这个东西我还真没有见过…系统只有这两种颜色吧…要想弄成其他颜色估计就要试试黑科技了…
  • paintingStyle:赞:relaxed:
    浪漫恋星空:@paintingStyle :sunglasses::sunglasses::sunglasses:

本文标题:iOS动态修改状态栏的颜色

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