关闭

iOS 控制Status Bar的隐藏和显示

3404人阅读 评论(0) 收藏 举报
分类:
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了。

6
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:443240次
    • 积分:6614
    • 等级:
    • 排名:第3557名
    • 原创:119篇
    • 转载:7篇
    • 译文:8篇
    • 评论:102条
    博客专栏
    文章分类
    最新评论