• iOS 更改状态栏颜色和隐藏状态栏


    更改状态栏颜色

    iOS7以后

    状态栏的字体为黑色:UIStatusBarStyleDefault

    状态栏的字体为白色:UIStatusBarStyleLightContent

    解决方案

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

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

    [UIApplication sharedApplication].statusBarStyle =  UIStatusBarStyleDefault
    

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

    解决个别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
    可以隐藏启动页展示过程的状态栏。
    
  • 相关阅读:
    实参和形参
    location对象
    区别 apply,call
    窗体之间的交互(window.opener)
    我的升级脚本总结
    Create elements
    history 对象
    函数参数的属性:callee
    发布app store流程
    【转】如何生成静态页面的五种方案
  • 原文地址:https://www.cnblogs.com/gchlcc/p/9938390.html
Copyright © 2020-2023  润新知