iphone设备在通话或录音状态中,状态栏下移了20个像素,这时controller的view的frame的高度就减少了20个像素,所以我们需要根据view的frame去布局子view。但是是,当状态栏还原回去的时候,系统并没有帮我们还原回去。

UIViewController的api,在ios5.0以后增加了两个函数:

– (void)viewWillLayoutSubviews 

– (void)viewDidLayoutSubviews 

发现如果一个Controller是用系统方式压栈进去的,但系统状态栏改变的时候,会回调这个两个函数,所以我们可以在这两个函数里重新获取self.view.frame进行子view的布局。

但是通常系统的压栈方式是不符合我们的需求的,如果我们自定义一个containerViewController,例如自己的tabbarcontroller,通过addSubView的方式显示controller,就不会回调这两个函数。这时,我们就可以监听状态栏变化的通知,对view进行重布局。代码如下:

//在init的时候监听状态栏改变的通知UIApplicationDidChangeStatusBarFrameNotification

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if(self){
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(layoutControllerSubViews) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
}
return self;
}

我们可以在layoutControllerSubViews对controller的子view进行重布局。

最新文章

  1. LeetCode题目按公司分类
  2. 对于div的右浮动会导致顺序会改变
  3. TLV简介
  4. C#中派生类调用基类构造函数用法分析
  5. ListView中EditText的数据加载错乱的问题
  6. C#中的lock关键字;就是lock住一个大家都共同访问的(静态static的)东东就行了
  7. Matlab中.*和./详解
  8. 一个可以拖动的自定义Gridview代码
  9. Android之Fragment详解
  10. 2018-2019-2 网络对抗技术 20165206 Exp3 免杀原理与实践
  11. 20165306 Exp3 免杀原理与实践
  12. Tomcat 500error: Could not initialize class
  13. Apache启动不成功时,用命令行检测(新手)
  14. [W3bSafe]Metasploit溢出渗透内网主机辅助脚本
  15. 使用 Redis 共享 Session 会话
  16. window.location.href 与 window.loaction.replace区别
  17. hdu 1525 Euclid's Game【 博弈论】
  18. C# 数组基础
  19. JAVA练手--线程(Thread)
  20. 关于C与python交互设想及文章汇总

热门文章

  1. 真正的能理解CSS中的line-height,height与line-height
  2. libfacedetection
  3. C++类成员存储大小
  4. ThreadLocal Memory Leak in Java web application - Tomcat
  5. k8s SLUB: Unable to allocate memory on node -1 错误
  6. Django_静态文件的配置(STATIC_URL)
  7. 微信公众号使用vue,安卓端点击按钮404,ios访问正常问题
  8. docker 使用阿里云镜像加速
  9. java学习笔记(6)-多线程(1)
  10. input 标签鼠标放入输入框补全提示