關於適配

在蘋果正式發佈iPhone 6和iPhone 6 plus以後,對適配問題一直比較困擾,雖然項目一直用的是Autolayout,看完網上各類適配的文章後更是一團糟。佈局

當時總結了下關於適配的幾個點:spa

  1. 添加iPhone 6和iPhone 6 plus的啓動圖,或者使用xib做爲啓動視圖,避免自動放大的適配
  2. 使用Autolayout,固然使用絕對佈局不是徹底不可取。
  3. 添加@3x的切圖,或者使用矢量圖(推薦)

作完這些這不就完事了嗎,但後來發現一個問題,看下圖設計

gesture.jpg

「請鏈接圓點 並記住路徑」這個Label當初設計的是向上約束爲20,這在 320 x 480320 x 568 分辨率下基本沒什麼問題,但在iPhone 6和iPhone 6 plus就會顯示的整個Label太靠頂部,不夠美觀。下面的Button也有一樣的問題,太靠底部。code

基於上面的問題,我跳入了 Size Classes 這個坑,爲何這麼說。
sizeclasses.jpgip

Any heightCompact width模式下對應的是iPhone 6 plus之外的設備,Regular heightCompact width模式下對應是全部iPhone 設備縱向的狀況。沒有單獨的iPhone 6 plus的狀況,這樣根本解決不了問題。這裏我想說的是,若是的APP只支持iPhone設備,而且只適用於豎屏,就徹底沒有必要使用Size Classesget

再回頭再想一想,除了上面提到的三點,還須要解決什麼?io

其實只有一個問題:特殊界面的處理

先不要急着吐槽,請往下看class

回到剛纔那個問題,如何解決?date

  • 方法1:判斷不一樣設備並設置不一樣的約束值,適用於手寫代碼
  • 方法2:在xib/storyboard中作幾套佈局,固然只自適用於 xib/storyboard
  • 方法3:約束值使用相對於屏幕高度的百分比,適用於手寫和 xib/storyboard

重點來講下方法3,手寫代碼能夠輕鬆作到這點。但在 xib/storyboard 中是沒辦法設置約束值相對於另外一個view的高度的比例。解決辦法:請看下圖
gesture_20.png
好比設計師是用iPhone 5/5s來設計的,向上Label向上約束要求是20,那麼在 xib/storyboard 上能夠在Label上面加一個透明的View設置高度是20。這時候須要作的是file

  1. 設置Label水平居中,向上相對於View約束爲0
  2. 設置View,左、右、上相對於父視圖爲0
  3. 設置View的高度相對於父視圖也就是self.view的高度爲20:568,這裏技巧是選擇View按住Control鍵鏈接到self.view選擇 Equal Heights ,而後再去詳情中設置Multiplier的值
    height.png
  4. 最後 Update Frames 便可
    update.png

還有另外一種佈局方式,把Label做爲View的子視圖,而且上下水平居中,一樣的設置View的高度比例,這種方式適用於控件較多的頁面。
other.jpg

這樣一來,不論在什麼屏幕上都會有比較好的佈局效果。

不過利用比例佈局的方式,可能沒有單獨判斷並設置約束那麼完美,但在複雜的界面佈局時就較爲有優點。目前項目中首頁的適配效果:
header.png
以及其中一個佈局的示例
demo.png

另一個例子:知乎上這個 問題 其中 劉煒 的回答,關於 profile 頁面的適配。手動設置ImageView的大小,也可使用上述設置比例的方法解決。

相關文章
相關標籤/搜索