標籤:
對於不同蘋果裝置,各個參數查看《iOS:機型參數、sdk、xcode各版本》。
機型變化
座標:表示螢幕物理尺寸大小,座標變大了,表示機器螢幕尺寸變大了;
像素:表示螢幕圖片的大小,跟座標之間有個對應關係,比如1:1或1:2等;
ppi:代表螢幕物理大小到圖片大小的比例值,如果ppi不變,則座標和像素的比例不會變;
iPhone 4以前 iPhone、iPhone3/3G機型未採用retina,座標是320 x 480,螢幕像素320 x 480 ,他們一一對應,1:1關係。即一個座標組應1個像素。 iPhone 4/4s 機器採用了retina螢幕,座標是320 x 480,螢幕像素640 x 960,他們之間是1:2關係。即一個座標組應2個像素。 iPhone 5/5s/5c 機器採用了retina螢幕,座標是320 x 568,螢幕像素640 x 1136,他們之間關係式1:2關係。即一個座標組應2個像素。 iPhone 6/6S 機器採用了retina螢幕,座標是375*667,螢幕像素750 x 1334,他們之間關係式1:2關係。即一個座標組應2個像素。 iPhone 6 plus/6S plus 機器採用了retina螢幕,座標是414*736,螢幕像素1080 x 1920,他們之間關係式1:2.6關係。即一個座標組應2.6個像素。 適配方法:
- 在iPhone 4s之後,不同機型,螢幕大小座標不變,跟實際圖片大小比例不是1:1就是1:2關係。因為座標不變,所以在開發中可以使用絕對位置,確定每個視圖位置,同時提供倆套圖片,~.png和[email protected],系統根據機器的解析度自動決定使用哪張圖片。
- iPhone 5/5s/5c之後,因為螢幕大小座標已變,高度增加568 - 480 = 88個點,再使用絕對位置的方式,會導致程式高度不夠,如果程式未做適配,系統會將多出來的88個點將會將會被自動均分為上下兩部分,使得上下出現黑邊。 對應不同機型,螢幕座標大小改變了,不能再絕對位置了,為瞭解決這個問題,ios出現了一種新技術:AutoLayout。AutoLayout可以解決不同機型,螢幕大小的變化,至於圖片的適配,因為5/5s/5c,座標:像素 = 1:2,所以直接使用@2x.png圖片就行。
至於@2x圖片大小,是按照640 x 960 還是 640 x 1136 的大小,一個是展開效果,一個是壓縮效果,因為比例差不多,推薦使用大圖的。
- iPhone 6之後,因為螢幕大小座標已變,寬、高都增大,但是寬、高比例不變,類似之前的處理方式,使用AutoLayout自動適配,座標:像素 = 1:2,使用@2x.png圖片。
綜合之前的,@2x圖片可以按照750 x 1334規格來。
- iPhone 6 plus,類似之前使用AutoLayout,在使用圖片的時候,因為 座標:像素 = 1:2.6,理論上使用@2.6x.png圖片即可,但是這不是整數,實際使用很不方便,而@2x 和 @3x 都不太行得通,怎麼辦?
引用一段文字說的很好:
“不是現有的螢幕物理解析度明顯超過了 @2x 但還達不到 @3x 的水平嗎?那我們歪歪一個滿足 @3x 的螢幕總可以吧?
對的,歪歪。
程式在 iPhone 6 Plus 上啟動並執行時候,iOS 會騙它說,你運行在一個超大的 @3x Retina 顯示屏上,物理解析度高達 1242 x 2208,邏輯解析度是 414 x 736,兩者都比 iPhone 6 要大。然後作為設計師和開發人員,也跟著一起歪歪。設計師畫圖的時候要把螢幕當成 1242 x 2208 來畫圖(而且要提供@3x 的高清圖),開發人員也按照 414 x 736 的邏輯解析度來寫程式。
但借來的總要還的。等咱們歪歪結束了以後,iOS 拿到這個假大的 UI 繪製結果,即時地再縮小到實際的 1080 x 1920 解析度(系統通過某種演算法)。於是,使用者在 iPhone 6 Plus 的螢幕上看到的永遠是被縮小了的映像:
這麼做使得設計和開發的過程大大簡化,且最後的實際縮放係數 @2.62x 非常接近理想的 @2.46x,使得同樣的素材在真機上看起來尺寸也非常合理。
尺寸適配:
代碼中的尺寸不要使用480、460這樣的絕對數值,使用的UIScreen取裝置的尺寸。
開啟適配?(手動/自動)
在某機型上,如果是自動適配,比如iPhone 5,老版程式就會在螢幕上、下倆端多出倆塊黑條;比如iPhone6/6plus,老版程式就會自動等比展開。那如何關閉自動適配?
指定啟動圖(例如iPhone 5為[email protected])或者使用Launch Screen File.xib,即程式使用手動適配,不會做展開等,但是程式內部必須已做處理,否則使用自動適配方案。
總結:
- 不同機型適配可看成兩部分,一是螢幕大小適配(座標),一是像素適配;前者根據不同的機型大小,視圖大小自動適應(AutoLayout);後者根據機型的解析度和座標比率,提供合適@xx圖片;
- 目前4s、5/5s/5c、6的適配,使用圖片部分,都是使用@2x的圖片,在不同的機器上肯定會有一定的展開、縮小,目前沒看到什麼好的解決方案,推薦圖片按大表徵圖准做;
- 趨勢:機器螢幕的大小可能會越來越多,絕對位置的方式肯定不行,使用AutoLayout,自動適配螢幕大小,類似網頁的思想來設計介面;
- 趨勢:xcode 6中已經可以使用向量圖了,可以使用向量圖,避免各種規格圖片;
下面將講解一下系統適配:從ios5開始,
IOS7以後和之前
| 12 |
<span style="font-size:18px;background-color: rgb(255, 255, 255);">#define IOSVersion [[[UIDevice currentDevice] systemVersion] floatValue]#define IsiOS7Later !(IOSVersion < 7.0)</span> |
系統需要適配有以下幾個點:
1.(StatusBar)StatusBarHeight 的高度 ios7以後 StatusBar是懸浮在螢幕上方的 所以ios7之後控制項布局需要加上20 而在ios7之前不需要
2. label的文本自適應需要適配
3.(ios8適配)UIAlertController UIAlertAction —ios8 代替了 UIAlertView
4. (ios8適配)ios8新增定位判斷,info.plist檔案設定兩個屬性 用到定位需要適配
(後續更新)
iOS:介面適配(三)--iPhone不同機型或裝置不同尺寸適配(螢幕適配)和系統適配