本文轉載自:http://blog.csdn.net/rhljiayou/article/details/12029927
IOS7狀態欄StatusBar官方標準適配方法
hello,大家好,ios7正式版已經發布,相信大家都在以各種方式來適配ios7.
如果你已經下載了xcode5,正準備使用,你會發現各種佈局的改變.
註定這段時間是忙的,是頭疼的!原創在此哦http://my.csdn.net/rhljiayou
這兩天經常會碰到羣裏有人在問問題,問ios7怎麼適配,以及各種網上說的如何解決ios7下狀態欄的問題.
我發現各種羣裏流傳着一種適配方法,就是修改window的座標(window.frame),然後大家紛紛效仿,但是往往出現各種問題,發出各種報怨,各種吐嘈;
殊不知別人的寫法並不是你的寫法,別人的適配也不是你的適配,所以別的方法不一定能解決你的問題.我們要理解他,得到解決思路,而不是解決代碼.
其實官方已經給出狀態欄同時兼容ios6和ios7的解決方案.他就集成在xcode5中,如下圖所示:
着急做適配,可能會做錯喔!原創在此哦http://my.csdn.net/rhljiayou
要了解這個適配先要講一下Deltas也就是這個 ∆,上過高中物理都應該知道這個東西,不認識的請自覺檢討(初中數學就教過).
Deltas的意思你可以理解爲增量.相對增量.
科普講完,下面是具體使用.
首先要出現∆選項,必須使用xcode5的方式打開xib:
在xib的第一個標籤中哦~原創在此哦http://my.csdn.net/rhljiayou
由於我們要同時兼容6和7,所以我們需要選6.1或更早
然後調整增量,增量的意思是如果運行在ios7的模式下,就使其座標+增量,如果是6或更早的,就是直接使用上面的座標
效果如圖,十分完美,呵呵原創在此哦http://my.csdn.net/rhljiayou
原 iOS7的界面上移問題
參考鏈接:
1.http://blog.csdn.net/rhljiayou/article/details/12029927
第一種方法:修改BaseSDK
XCode5的默認BaseSDK是iOS7,所以要修改成工程文件創建時的BaseSDK。但是XCode5中默認只帶有iOS7的SDK,所以要想能做到更改SDK,我們就要添加舊的SDK。
1.從蘋果開發者中心下載舊版本XCode,https://developer.apple.com/downloads/index.action?name=Xcode
2.從中提取出iPhoneOS
SDK 和iPhone Simulator SDK,前者所在的位置是XCode應用程序包中的路徑是Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs,後者是Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs
3.假設我們已經安裝了XCode5,那麼我們在應用程序中找到XCode.app右擊顯示包內容,依此 Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs 路徑打開,把提取出的iPhoneOS
SDK複製進去。模擬器SDK的拷貝也同理。
4.重啓XCode,這個時候就可以設置Base SDK了
5.假如設置成iOS6,那麼應用就算在運行iOS7的設備上也是呈現iOS6的特性。舉個例子,倘若此應用在需要輸入的時候彈出的鍵盤是iOS6樣式的並不是iOS7樣式的。
6.可以參考http://github.kimziv.com/blog/2013/09/22/how-to-use-older-base-sdks-in-xcode5/
第二種方法:手動代碼設置各個UI組件的frame
1.判斷當前設備的系統
#define iOS7 ([[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0)?YES:NO
2.再根據不同的系統設置Frame
第三種方法:改變window
1.需要在Info.plist配置文件中,增加鍵:UIViewControllerBasedStatusBarAppearance,並設置爲YES
2.在AppDelegate.m中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
添加
第四種方法:對每個UIViewController的.m文件中編寫代碼進行設置(推薦)
推薦使用這種方法
在iOS7當中未使用UINavigationController界面相對iOS6會上移20px,使用了會上移64px。簡單的說導航欄和狀態欄默認都會覆蓋下面的頁面,使用下面的方法就可以避免
if ([[[UIDevice currentDevice]systemVersion]floatValue]>=7.0)
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}