ios7适配
一.前言
iOS7可以說是蘋果一次革命性的變化,這次變化也足夠廣大iOS開發者們苦苦折騰一陣子了。但是,開發還是要繼續,支持iOS7是遲早要解決的問題。
這次的變化在布局上的體現有:view默認是全屏模式,即狀態欄statusbar不占內容視圖的尺寸,變為全透明的覆蓋在內容視圖上層。所有的bar(navigation bar, tool bar, search bars 與scope bars) 都是半透明的,默認也是不占用內容視圖的尺寸的。
所以,iOS7之前的工程,在不修改的情況下,必然會出現狀態欄覆蓋在內容視圖上的情況,有可能會出現導航條等覆蓋在界面上的情況。這里重點解決這兩個問題。
二.每個應用必須做的事情
1.????下載和安裝最新的XCode5
2.????解決狀態欄和導航欄的問題
1)使用xib或者storyboard布局
a)??????沒有使用UINavigationControler
用xcode5打開xib,在File inspector中,“Opens in”選擇“Default(5.0)”,如下圖。
然后“View as”選擇“iOS6.1 and Earlier”,如下圖。
然后針對xib中的控件,調整增量“iOS 6/7 Deltas”的Y值。增量的意思是如果運行在ios7的模式下,就使其坐標增加的量,如果是6或更早的,就是直接使用上面的坐標(Origin處設置的值)。
說明:“View as”選項表示當前編輯的xib是在哪個版本下面的效果。如果選擇”iOS6.1 and Earlier”,那么Deltas值表示在ios7下面的增量。因為ios6下面是從{0,0}點開始布局的,所以在iOS7下要想不被status bar覆蓋,需要從{0,20}開始布局,即Deltas為20。反之,如果View as為默認的”iOS7.0 and Later”,那么Deltas為-20。
b)??????使用了UINavigationControler,且隱藏navigationBar
針對UINavigationControler中所有viewcontroller.view的xib,使用同a)中的方法修改設置。
c)??????使用了UINavigationControler,且顯示navigationBar
這種情況設置navigationBar.translucent = NO 即可。
2)使用純代碼布局
使用純代碼布局,只能在代碼中手動修改origin.y值和height。
具體做法是,判斷當前設備的系統版本,如果是7.0及以上,則將UIViewController控制的view的frame.origin.y增加20像素即可。特別的,如果是根視圖,如果使用window.rootViewController = firstViewController的方式,則firstView中各個元素都需要調整origin.y的值;如果使用[windowaddSubView:firstView]的方式,則只需調整firstView。
?
為了簡化代碼,可以將判斷系統版本和調整frame的方法在prefix.pch中定義為宏,例如,在MyProject-Prefix.pch中定義IOS_7和IOS6_7_DELTA(V,X,Y,W,H)兩個宏:
#define IOS_7 ([[[UIDevicecurrentDevice] systemVersion] floatValue] >= 7.0f)
#define IOS6_7_DELTA(V,X,Y,W,H) if(IOS_7) {CGRect f = V.frame;f.origin.x += X;f.origin.y += Y;f.size.width +=W;f.size.height += H;V.frame=f;}
然后,例如在SubViewController的viewDidload方法中這樣調整:
if (IOS_7) {
?????????? IOS6_7_DELTA(self.view,0,20,0,-20);?
}
如果是iOS7之前的版本是全屏布局的,height需要-20的增量,否則不需要。
也可以定義一個view controller父類,在父類中處理,需要調整的子視圖控制器繼承該父類。
3.????更新app icon
?????????? 在iOS7下,iPhone應用的高分辨率appicon尺寸是120 x 120 像素,iPad應用的高分辨率app icon是152 x 152像素(見下表)。iOS7下Spotlight search results icon標準和高分辨率尺寸分別是40 x 40和80 x 80 (Info.plist配置中非必須項,官方建議設置)。
?
| Icon | 設備類型 | iOS6及之前 | iOS7及之后 | ||
| 標準(像素) | 高分辨率(@2x) 像素 | 標準(像素) | 高分辨率(@2x) 像素 | ||
| App Icon (required) | iPhone | 57 x 57 | 114 x 114 | 60 x 60 | 120 x 120 |
| App Icon (required) | iPad | 72 x 72 | 144 x 144 | 76 x 76 | 152 x 152 |
?
4.????更新啟動頁圖片尺寸
如果之前的啟動頁圖片(launch image)不包含狀態欄的高度,則launch image高度都應該增加20像素(對于iPhone, Default-568h@2x.png是640 x 1136像素,Default@2x.png是640 x 960像素,Default.png是320 x 480像素; 對于iPad,豎屏分別是768 x1024 和1536 x 2048像素, 橫屏分別是 1024 x 768 和 2048 x 1536像素)。
5.????支持高清顯示和iPhone5
如果之前還沒做這些,那么,現在是時候了。
三.每個應用都應該做的事情
1.??????檢查app中寫死的UI數值,比如size和position,用系統提供的動態數值替換它們。
2.??????檢查app中使用UIKit的地方,看尺度和風格發生變化的控制器和視圖是否對布局和外觀產生了影響。比如,開關更加寬了,組合式表格(grouped tables)變成通欄的了,進度指示條變成了非常細的小條。
3.??????調整App的UI風格,例如嘗試無邊框的按鈕,慎用投影、漸變、浮雕效果。因為iOS 7的美學重視平緩、分層——盡量少使用讓UI元素看起來擬實的視覺效果。
4.??????必要的話,將app升級到iOS 6中推薦的最佳實踐方法(如:Auto Layout和StoryBoard)并確保app不使用廢棄的API。
?
四. 參考資料
1.???? iOS 7 UI Transition Guide
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/index.html#//apple_ref/doc/uid/TP40013174
中文版http://mued.sohu.com/2013/06/ios-7-ui-transition-guide/
2.????iOS Human Interface Guidelines
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix.html#//apple_ref/doc/uid/TP40006556-CH27-SW1
3.???? IOS7狀態欄StatusBar官方標準適配方法
http://blog.csdn.net/rhljiayou/article/details/12029927
4.????適配iOS7開發
http://www.ifun.cc/blog/2013/09/28/gua-pei-ios7kai-fa/
5.????Developer’s Guide to the iOS 7Status Bar
http://www.doubleencore.com/2013/09/developers-guide-to-the-ios-7-status-bar/
總結
- 上一篇: oracle rac 宕机频繁,Orac
- 下一篇: [W pthreadpool-cpp.c