zoukankan      html  css  js  c++  java
  • iOS 更改状态栏颜色和隐藏状态栏

    https://my.oschina.net/huqiji/blog/2962132

    更改状态栏颜色

    iOS7以后

    状态栏的字体为黑色:UIStatusBarStyleDefault

    状态栏的字体为白色:UIStatusBarStyleLightContent

    解决方案

    1、在info.plist中,将View controller-based status bar appearance 设为 NO

    状态栏字体的颜色只由下面的属性设定,默认为白色:

    [UIApplication sharedApplication].statusBarStyle =  UIStatusBarStyleDefault
    

    解决个别vc中状态栏字体颜色不同的办法

    1、修改info.plist
    
        在info.plist中,将 View controller-based status bar appearance 设为 NO.
    
    2、在app delegate中添加:
    
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    
    3、在个别ViewController状态栏字体颜色不一样的地方:
    
        -(void)viewWillAppear:(BOOL)animated {
            [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
        }
    
        -(void)viewWillDisappear:(BOOL)animated {
            [super viewWillDisappear:animated];
            [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
        }
    

    2、在info.plist中,将View controller-based status bar appearance 设为 YES

    在info.plist中 View controller-based status bar appearance 的 默认值就是YES

    如果View controller-based status bar appearance为YES 时 [UIApplication sharedApplication].statusBarStyle 无效。

    解决方案:

    1、在vc中重写vc的preferredStatusBarStyle方法
    
        -(UIStatusBarStyle)preferredStatusBarStyle {
            return UIStatusBarStyleDefault;
        }
        
    2、在viewDidload中调用:
    
        [self setNeedsStatusBarAppearanceUpdate];
    
    

    可能出现的问题:

    当vc在nav中时,上面方法没用,vc中的preferredStatusBarStyle方法根本不用被调用。

    原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,只会调用navigation controller中的preferredStatusBarStyle方法,vc中的preferredStatusBarStyley方法跟本不会被调用。

    解决办法有两个:

    方法一:
    
        设置 navbar 的barStyle 属性会影响status bar 的字体和背景色。如下。
    
        //status bar的字体为白色 ,导航栏的背景色是黑色。
    
        self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    
        //status bar的字体为黑色 ,导航栏的背景色是白色,状态栏的背景色也是白色。
    
        self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
        
    方法二:
    
        自定义一个navController的子类,在这个子类中重写preferredStatusBarStyle方法:
    
        MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
    
        self.window.rootViewController = nav;
    
        @implementation MyNav
    
        - (UIStatusBarStyle)preferredStatusBarStyle {
            UIViewController* topVC = self.topViewController;
            return [topVC preferredStatusBarStyle];
        }
    
    

    隐藏某个控制器的状态栏

    1.View controller-based status bar appearance = NO

    [[UIApplication sharedApplication] setStatusBarHidden:hidden];
    

    2.View controller-based status bar appearance = YES

    -  (BOOL)prefersStatusBarHidden {
        return YES;
    }
    

    3.设置Status bar is initially hidden = YES

    可以隐藏启动页展示过程的状态栏。
    

     

  • 相关阅读:
    centos7+php7.1.4+mysql5.7+swoole搭建
    鄙视自己(转)
    Mysql的sql优化概念---三大范式
    PHP的设计模式-单例设计
    Composer的安装使用
    PHPstorm的一些快捷键
    论代码走查的重要性
    Java泛型读书笔记 (三)
    Java泛型读书笔记 (一)
    Java泛型读书笔记 (二)
  • 原文地址:https://www.cnblogs.com/itlover2013/p/14765025.html
Copyright © 2011-2022 走看看