博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS关于状态栏隐藏的问题(OC)
阅读量:6353 次
发布时间:2019-06-22

本文共 1190 字,大约阅读时间需要 3 分钟。

背景

最近有一个需求,就是在单独某个页面去隐藏/显示状态栏,网上真的有很多方法,但是很混杂。。我也比较懒,先把结论放在前面是我的风格,可以拿来直接用。具体的原因可以在后面细看。

拿来直接用

方法一

  • 第一种情况(vc嵌套在Nav中)

自定义一个导航控制器,继承UINavigationController,重写 - (UIViewController *)childViewControllerForStatusBarHidden 方法,返回 self.topViewController

#import "BHNavigationController.h"@implementation BHNavigationController- (UIViewController *)childViewControllerForStatusBarHidden {    return self.topViewController;}@end复制代码

在需要隐藏状态栏的控制器中,调用 - (BOOL)prefersStatusBarHidden 方法即可

- (BOOL)prefersStatusBarHidden {    return YES;}复制代码
  • 第二种情况(单纯的vc,没有任何嵌套,可能是model出来的控制器)

直接设置 - (BOOL)prefersStatusBarHidden 方法即可

方法二,利用Category

  • 创建一个UINavigationController的分类
  • 重写 - (BOOL)prefersStatusBarHidden 方法,这样就会先调用分类中的方法,而不去调用原来的方法
- (BOOL)prefersStatusBarHidden {    return [[self topViewController] prefersStatusBarHidden];}复制代码

在需要隐藏状态栏的控制器,调用- (BOOL)prefersStatusBarHidden方法控制隐藏/展示即可

如果你的需求不是隐藏状态栏,而是设置状态栏的样式,同理,这里就不写重复的东西了

分析原因

为什么嵌套的情况下,却不调用 - (BOOL)prefersStatusBarHidden 方法?

  • 在我们嵌套了 UINavigationController 的时候,此时控制权在 UINavigationController中,所以这时调用的是navigationController本身的 prefersStatusBarHidden 方法,所以我们通过上述的两种方式,让导航控制器中的topViewController重新获取控制权,所以设置生效。

转载于:https://juejin.im/post/5cd0fc50f265da035e213b33

你可能感兴趣的文章
思科表态反对网络中立
查看>>
《HTML5+CSS3网页设计入门必读》——1.5 利用多种Web浏览器执行测试
查看>>
Velocity官方指南-容器
查看>>
国家为何如此重视石墨烯?
查看>>
《Python和Pygame游戏开发指南》——1.14 配套网站上的更多信息
查看>>
Kafka+Flink 实现准实时异常检测系统
查看>>
利用mybatis查询两级树形菜单
查看>>
《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
查看>>
Spring声明式事务管理之二:核心接口API
查看>>
LNMP环境安装(二)
查看>>
MFC对话框编程-图片控件
查看>>
nodejs启动webserver服务
查看>>
小偷被抓叫嚣:我不偷警察没饭吃
查看>>
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>