當(dāng)手機(jī)開(kāi)啟熱點(diǎn)或者正在通過(guò)中(電話退到后臺(tái))導(dǎo)致?tīng)顟B(tài)欄高度由20變?yōu)?0,導(dǎo)致app整個(gè)界面向下偏移了20高度
先說(shuō)一下傻谁,狀態(tài)欄高度變化后發(fā)生了什么?
狀態(tài)欄高度發(fā)生變化 ,UIViewController的view的frame和bounds都會(huì)發(fā)生變化,當(dāng)狀態(tài)欄高度40時(shí)胞谈,UIViewController的view的高度會(huì)減少20 .狀態(tài)欄恢復(fù)為原來(lái)的20時(shí),UIViewController的view的高度也恢復(fù)為之前的全屏高度
如果你用的是autoLayout憨愉,那么恭喜你 烦绳,什么都不用做,不會(huì)出現(xiàn)上面的問(wèn)題配紫,autoLayout幫你做了一切
如果你是手寫(xiě)的布局径密,并且沒(méi)有autoLayout,要解決這個(gè)問(wèn)題躺孝,就只能一個(gè)界面一個(gè)界面的改了享扔。
有幾種解決的方法
1.利用UIApplicationDidChangeStatusBarFrameNotification通知,在每個(gè)控制器里添加通知植袍,當(dāng)狀態(tài)欄變化的時(shí)候收到通知后調(diào)整subview的布局
2.UIViewController的viewDidLayoutSubviews方法惧眠,當(dāng)視圖控制器的view的bounds發(fā)生變化的時(shí)候,就會(huì)調(diào)用此方法于个,因?yàn)闋顟B(tài)欄高度變化之后氛魁,view的bounds也發(fā)生了變化,所以可以通過(guò)這個(gè)方法調(diào)整subviews的布局,而不需要添加1方法的通知
3.UIViewController里手寫(xiě)autoLayout代碼秀存,工作量其實(shí)沒(méi)有想向中的那么大 ,我沒(méi)有加約束捶码,只是利用UIView的autoresizingMask屬性,去調(diào)整了每個(gè)控制器的subview
_weekTable= [[UITableViewalloc]initWithFrame:CGRectMake(0,8,self.view.width,self.view.height-8)style:UITableViewStylePlain];
_weekTable.autoresizingMask=UIViewAutoresizingFlexibleHeight;