iOS6和iOS7代碼的適配(3)——座標適配

  因爲iOS7裏面status bar和視圖是重疊在一塊兒了,因此應用的y座標就無法和之前一致了,須要從新計算設定。基本上,你的應用用Xcode5運行一下就能看見這個問題,這裏寫了一個最簡單的例子,一個View上加了一個Label控件,分別在iOS6和iOS7的模擬器上的樣子。windows

      從圖上明顯能夠看到,iOS7上的應用y座標起始計算點是從屏幕頂點算起,而iOS6是從status bar來算起,這個緣由是致使一切問題的根源。ui

      好了,找到了問題就好辦,我列舉一下看到過的嘗試過的方法:spa

1. 修改window的frame座標.net

      這個思路是在iOS7系統裏面把windows下拉20個pixel,這樣可讓開status bar的位置,因而一切都恢復了正常。code

      好處是不用每一個viewController來逐個修改,通常在AppDelegate.m一個文件裏面修改便可。壞處是現實比想象的殘酷,看起來簡單方便的方法總有各類各樣的問題,網上這樣作的也各類吐槽,屢次努力沒結果後我也放棄了繼續鑽研。blog

2. 手動修改座標文檔

      這個方法對於不使用XIB文件的學院派極客是惟一的方法,也沒有任何問題,就是工做量大。另外,對於使用IB來輔助作UI的應用來講就不太適合了。get

3. 修改Delta值方法

      做爲蘋果公司來講,推出iOS7時顯然能夠預計到這樣的困境,它也確實給你們提供瞭解決方案。這個方案是蘋果在官方文檔裏面介紹過的方案。im

      首先是選擇須要適配的IB文件,把Interface Builder Document裏面的View as選擇成iOS 6.1 and Earlier。   

      這樣在IB裏面各個控件都會變成iOS6的樣式,但此時在iOS7上運行系統仍然會用iOS7的控件來顯示,座標也仍然不正確——貌似一點做用都沒有。恩,這只是第一步,不用急,再作一步就能夠實現適配了!

      修改DeltaY的值,修改爲什麼值是根據你的實際狀況定的,我這裏顯然就是status bar的高度,20個pixel。

      再運行一下應用看看,viewController是否是已經適配好了?  

      這個方法簡單直觀,但須要在多個viewController裏面一一作適配,不過整體工做量不大,適配效果也很良好,旋轉屏幕等等都沒有問題,因此個人應用最後採用了這種方法來適配,實際中工做量也不大。

http://blog.csdn.net/sakulafly/article/details/17956681

相關文章
相關標籤/搜索