在蘋果正式發佈iPhone 6和iPhone 6 plus以後,對適配問題一直比較困擾,雖然項目一直用的是Autolayout,看完網上各類適配的文章後更是一團糟。佈局
當時總結了下關於適配的幾個點:spa
作完這些這不就完事了嗎,但後來發現一個問題,看下圖設計
「請鏈接圓點 並記住路徑」這個Label
當初設計的是向上約束爲20,這在 320 x 480
和 320 x 568
分辨率下基本沒什麼問題,但在iPhone 6和iPhone 6 plus就會顯示的整個Label太靠頂部,不夠美觀。下面的Button也有一樣的問題,太靠底部。code
基於上面的問題,我跳入了 Size Classes
這個坑,爲何這麼說。
ip
Any height
和Compact width
模式下對應的是iPhone 6 plus之外的設備,Regular height
和Compact width
模式下對應是全部iPhone 設備縱向的狀況。沒有單獨的iPhone 6 plus的狀況,這樣根本解決不了問題。這裏我想說的是,若是的APP只支持iPhone設備,而且只適用於豎屏,就徹底沒有必要使用Size Classes
。get
再回頭再想一想,除了上面提到的三點,還須要解決什麼?io
先不要急着吐槽,請往下看class
回到剛纔那個問題,如何解決?date
重點來講下方法3,手寫代碼能夠輕鬆作到這點。但在 xib/storyboard 中是沒辦法設置約束值相對於另外一個view的高度的比例。解決辦法:請看下圖
好比設計師是用iPhone 5/5s來設計的,向上Label向上約束要求是20,那麼在 xib/storyboard 上能夠在Label上面加一個透明的View設置高度是20。這時候須要作的是file
Equal Heights
,而後再去詳情中設置Multiplier的值Update Frames
便可還有另外一種佈局方式,把Label做爲View的子視圖,而且上下水平居中,一樣的設置View的高度比例,這種方式適用於控件較多的頁面。
這樣一來,不論在什麼屏幕上都會有比較好的佈局效果。
不過利用比例佈局的方式,可能沒有單獨判斷並設置約束那麼完美,但在複雜的界面佈局時就較爲有優點。目前項目中首頁的適配效果:
以及其中一個佈局的示例
另一個例子:知乎上這個 問題 其中 劉煒 的回答,關於 profile 頁面的適配。手動設置ImageView的大小,也可使用上述設置比例的方法解決。