ios7适配
一.前言
iOS7可以說是蘋果一次革命性的變化,這次變化也足夠廣大iOS開發(fā)者們苦苦折騰一陣子了。但是,開發(fā)還是要繼續(xù),支持iOS7是遲早要解決的問題。
這次的變化在布局上的體現(xiàn)有:view默認(rèn)是全屏模式,即狀態(tài)欄statusbar不占內(nèi)容視圖的尺寸,變?yōu)槿该鞯母采w在內(nèi)容視圖上層。所有的bar(navigation bar, tool bar, search bars 與scope bars) 都是半透明的,默認(rèn)也是不占用內(nèi)容視圖的尺寸的。
所以,iOS7之前的工程,在不修改的情況下,必然會(huì)出現(xiàn)狀態(tài)欄覆蓋在內(nèi)容視圖上的情況,有可能會(huì)出現(xiàn)導(dǎo)航條等覆蓋在界面上的情況。這里重點(diǎn)解決這兩個(gè)問題。
二.每個(gè)應(yīng)用必須做的事情
1.????下載和安裝最新的XCode5
2.????解決狀態(tài)欄和導(dǎo)航欄的問題
1)使用xib或者storyboard布局
a)??????沒有使用UINavigationControler
用xcode5打開xib,在File inspector中,“Opens in”選擇“Default(5.0)”,如下圖。
然后“View as”選擇“iOS6.1 and Earlier”,如下圖。
然后針對(duì)xib中的控件,調(diào)整增量“iOS 6/7 Deltas”的Y值。增量的意思是如果運(yùn)行在ios7的模式下,就使其坐標(biāo)增加的量,如果是6或更早的,就是直接使用上面的坐標(biāo)(Origin處設(shè)置的值)。
說明:“View as”選項(xiàng)表示當(dāng)前編輯的xib是在哪個(gè)版本下面的效果。如果選擇”iOS6.1 and Earlier”,那么Deltas值表示在ios7下面的增量。因?yàn)閕os6下面是從{0,0}點(diǎn)開始布局的,所以在iOS7下要想不被status bar覆蓋,需要從{0,20}開始布局,即Deltas為20。反之,如果View as為默認(rèn)的”iOS7.0 and Later”,那么Deltas為-20。
b)??????使用了UINavigationControler,且隱藏navigationBar
針對(duì)UINavigationControler中所有viewcontroller.view的xib,使用同a)中的方法修改設(shè)置。
c)??????使用了UINavigationControler,且顯示navigationBar
這種情況設(shè)置navigationBar.translucent = NO 即可。
2)使用純代碼布局
使用純代碼布局,只能在代碼中手動(dòng)修改origin.y值和height。
具體做法是,判斷當(dāng)前設(shè)備的系統(tǒng)版本,如果是7.0及以上,則將UIViewController控制的view的frame.origin.y增加20像素即可。特別的,如果是根視圖,如果使用window.rootViewController = firstViewController的方式,則firstView中各個(gè)元素都需要調(diào)整origin.y的值;如果使用[windowaddSubView:firstView]的方式,則只需調(diào)整firstView。
?
為了簡化代碼,可以將判斷系統(tǒng)版本和調(diào)整frame的方法在prefix.pch中定義為宏,例如,在MyProject-Prefix.pch中定義IOS_7和IOS6_7_DELTA(V,X,Y,W,H)兩個(gè)宏:
#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方法中這樣調(diào)整:
if (IOS_7) {
?????????? IOS6_7_DELTA(self.view,0,20,0,-20);?
}
如果是iOS7之前的版本是全屏布局的,height需要-20的增量,否則不需要。
也可以定義一個(gè)view controller父類,在父類中處理,需要調(diào)整的子視圖控制器繼承該父類。
3.????更新app icon
?????????? 在iOS7下,iPhone應(yīng)用的高分辨率appicon尺寸是120 x 120 像素,iPad應(yīng)用的高分辨率app icon是152 x 152像素(見下表)。iOS7下Spotlight search results icon標(biāo)準(zhǔn)和高分辨率尺寸分別是40 x 40和80 x 80 (Info.plist配置中非必須項(xiàng),官方建議設(shè)置)。
?
| Icon | 設(shè)備類型 | iOS6及之前 | iOS7及之后 | ||
| 標(biāo)準(zhǔn)(像素) | 高分辨率(@2x) 像素 | 標(biāo)準(zhǔn)(像素) | 高分辨率(@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.????更新啟動(dòng)頁圖片尺寸
如果之前的啟動(dòng)頁圖片(launch image)不包含狀態(tài)欄的高度,則launch image高度都應(yīng)該增加20像素(對(duì)于iPhone, Default-568h@2x.png是640 x 1136像素,Default@2x.png是640 x 960像素,Default.png是320 x 480像素; 對(duì)于iPad,豎屏分別是768 x1024 和1536 x 2048像素, 橫屏分別是 1024 x 768 和 2048 x 1536像素)。
5.????支持高清顯示和iPhone5
如果之前還沒做這些,那么,現(xiàn)在是時(shí)候了。
三.每個(gè)應(yīng)用都應(yīng)該做的事情
1.??????檢查app中寫死的UI數(shù)值,比如size和position,用系統(tǒng)提供的動(dòng)態(tài)數(shù)值替換它們。
2.??????檢查app中使用UIKit的地方,看尺度和風(fēng)格發(fā)生變化的控制器和視圖是否對(duì)布局和外觀產(chǎn)生了影響。比如,開關(guān)更加寬了,組合式表格(grouped tables)變成通欄的了,進(jìn)度指示條變成了非常細(xì)的小條。
3.??????調(diào)整App的UI風(fēng)格,例如嘗試無邊框的按鈕,慎用投影、漸變、浮雕效果。因?yàn)閕OS 7的美學(xué)重視平緩、分層——盡量少使用讓UI元素看起來擬實(shí)的視覺效果。
4.??????必要的話,將app升級(jí)到iOS 6中推薦的最佳實(shí)踐方法(如: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狀態(tài)欄StatusBar官方標(biāo)準(zhǔn)適配方法
http://blog.csdn.net/rhljiayou/article/details/12029927
4.????適配iOS7開發(fā)
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/
總結(jié)
- 上一篇: oracle rac 宕机频繁,Orac
- 下一篇: 判断iOS6/iOS7, 3.5inch