隨着蘋果在2013年9月18日發佈iOS7最新的系統以來,iOS各種設備升級到iOS7的數字就已經不斷刷新記錄。目前據外界統計iOS7設備裝機量已經達到2.5億部,已佔iOS設備的64%。由此可見讓自己的app適配到iOS7是如此的重要。下面就說一下采取哪種方法能讓你的app適配iOS7的要求。
第一種,你的app使用自帶的UINavgationController的導航欄
衆所周知,iOS7的標題欄(statusbar)已經和視圖重疊在一起,所以y座標的值有所改變。從而導致原來的app頭部座標向上偏移,而不是顯示在正確的位置。如果你的app使用了下面的特性如下:
那麼恭喜你,你只需要在你的ViewController裏面的ViewDidLoad裏面加入下面這句話就可以完成了適配:
self.edgesForExtendedLayout = UIRectEdgeNone;
然後你的app導航欄和狀態欄的位置就已經恢復正確了。
第二種:你沒有用系統自帶的導航欄而是自己貼視圖(View)模擬成導航欄的樣子:
這種情況你就需要在AppDelegate文件里加入下面的代碼:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { [application setStatusBarStyle:UIStatusBarStyleLightContent]; self.window.clipsToBounds =YES; self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height); self.window.bounds = CGRectMake(0,0, self.window.frame.size.width, self.window.frame.size.height); [[NSUserDefaults standardUserDefaults] setFloat:self.window.frame.size.height forKey:@"windowHeight"]; }
如果你用到了pushViewController的方法,別忘記在目的視圖的ViewDidAppear裏面加入下面的代碼:
-(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { CGRect frame=self.view.frame; if (frame.size.height==[[NSUserDefaults standardUserDefaults] floatForKey:@"windowHeight"]) { frame.size.height-=20; } self.view.frame=frame; } }
這樣你的app也已經完成了適配。其實適配起來也還算蠻方便的。最後展示一下我的app在iOS7下面的效果。
參考資料: