美文网首页
UIStatusBar高度变化导致布局错乱

UIStatusBar高度变化导致布局错乱

作者: 小赢一场 | 来源:发表于2016-05-05 22:07 被阅读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;

    相关文章

      网友评论

          本文标题:UIStatusBar高度变化导致布局错乱

          本文链接:https://www.haomeiwen.com/subject/jzgdrttx.html