iOSiOS学习笔记iOS开发者

iOS动态修改状态栏的颜色

2017-04-27  本文已影响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

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

上一篇下一篇

猜你喜欢

热点阅读