UIStatusBar高度变化导致布局错乱

2016-05-05  本文已影响408人  小赢一场

当手机开启热点或者正在通过中(电话退到后台)导致状态栏高度由20变为40,导致app整个界面向下偏移了20高度

先说一下,状态栏高度变化后发生了什么 

状态栏高度发生变化 ,UIViewController的view的frame和bounds都会发生变化,当状态栏高度40时,UIViewController的view的高度会减少20 .状态栏恢复为原来的20时,UIViewController的view的高度也恢复为之前的全屏高度

如果你用的是autoLayout,那么恭喜你 ,什么都不用做,不会出现上面的问题,autoLayout帮你做了一切

如果你是手写的布局,并且没有autoLayout,要解决这个问题,就只能一个界面一个界面的改了。

有几种解决的方法

1.利用UIApplicationDidChangeStatusBarFrameNotification通知,在每个控制器里添加通知,当状态栏变化的时候收到通知后调整subview的布局

2.UIViewController的viewDidLayoutSubviews方法,当视图控制器的view的bounds发生变化的时候,就会调用此方法,因为状态栏高度变化之后,view的bounds也发生了变化,所以可以通过这个方法调整subviews的布局,而不需要添加1方法的通知

3.UIViewController里手写autoLayout代码,工作量其实没有想向中的那么大 ,我没有加约束,只是利用UIView的autoresizingMask属性,去调整了每个控制器的subview

_weekTable= [[UITableViewalloc]initWithFrame:CGRectMake(0,8,self.view.width,self.view.height-8)style:UITableViewStylePlain];

_weekTable.autoresizingMask=UIViewAutoresizingFlexibleHeight;

上一篇下一篇

猜你喜欢

热点阅读