ParadiseDuo

✎﹏ℳ๓₯㎕❦

iOS 控制Status Bar的隐藏和显示

1.在info.plist设置中,View controller-based status bar appearance的值要设置成YES,经测试当是NO的时候,接下来要做的事不会被执行。

2.在ViewController.m中添加(ViewController.m是创建项目时自动生成的rootViewController)
//控制状态栏显隐

- (UIViewController*)childViewControllerForStatusBarHidden{

    return  [[UIViewController alloc] init];

}


//控制状态栏样式

- (UIViewController*)childViewControllerForStatusBarStyle{

    return  [[UIViewController alloc] init];

}

由child controller 来控制状态栏的显隐和样式。
如果希望状态栏的样式是UIStatusBarStyleLightContent且在全局设置中已经设置好了,由于第1步的设置会导致全局设置无效,所以还要加上对样式的控制。

3.在yourChildViewContoller1.m中添加

//是否隐藏状态栏

- (BOOL)prefersStatusBarHidden{

    if () {

        return YES;//隐藏

    }

    return NO;//显示

}

yourChildViewContoller2.m中添加

- (UIStatusBarStyle)preferredStatusBarStyle{

    return UIStatusBarStyleLightContent;

}

yourChildViewContoller1yourChildViewContoller2可以是同一个,也可以是不同的



4.

在第3步中添加的方法会在app载入后立即执行,在后面的操作过程中是不会被执行的

当希望状态栏改变状态的时候,需要执行这个方法[self setNeedsStatusBarAppearanceUpdate];

如果在yourChildViewContoller1、yourChildViewContoller2中执行这个方法,是无效的.

状态栏只能由ViewController来控制,第2步中的设置相当于加了个代理,由代理来决定结果,但是要代理来执行还得由ViewController来发出命令,所以setNeedsStatusBarAppearanceUpdate方法得是ViewController来调用。

改成[[[[UIApplication sharedApplication] keyWindow] rootViewController] setNeedsStatusBarAppearanceUpdate];在代理的child controller中执行就OK了。

阅读更多
版权声明:本文为博主原创文章,未经博主允许可以转载,但转载时请附上原文地址: https://blog.csdn.net/youshaoduo/article/details/53992780
个人分类: iOS
上一篇MPMovieplayerviewcontroller播放结束后自动消失的解决方案
下一篇UIImageWriteToSavedPhotosAlbum保存图片崩溃
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭