美文网首页
iOS 更改状态栏颜色和隐藏状态栏

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

作者: JohnXych | 来源:发表于2019-12-20 10:59 被阅读0次

    iOS7以后

    状态栏的字体为黑色:UIStatusBarStyleDefault

    状态栏的字体为白色:UIStatusBarStyleLightContent

    解决方案

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

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

    解决个别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;

        @implementationMyNav    - (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;

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

    相关文章

      网友评论

          本文标题:iOS 更改状态栏颜色和隐藏状态栏

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