美文网首页
iOS动态修改状态栏的颜色

iOS动态修改状态栏的颜色

作者: aggie1024 | 来源:发表于2021-09-23 17:49 被阅读0次

    摘自:https://www.jianshu.com/p/d0a523659f08
    感谢原作者

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

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

    - (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。。。最后补一张效果图就滚去睡觉了!

    image

    相关文章

      网友评论

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

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