iOS - 適配iPad和iPhone及其橫豎屏 (Vary For Traits)

前言

Vary For Traits 直接翻譯過來就是因設(shè)備而異, 就是專門為適配而生的.
Xcode 8 之后的適配開始使用了Vary For Traits了, Vary For Traits可以讓我們很方便的適配iPad和iPhone的各種機型、橫豎屏、分屏等 (關(guān)于橫豎屏的使用,可以看我的另一篇簡書) , 下面讓我們正式開始學(xué)習(xí)Vary For Traits.

本篇的github地址

(學(xué)習(xí)這個之前最好有AutoLayout的基礎(chǔ),以便去添加約束)

1.Size Class

Vary For Traits 是基于Size Classes進(jìn)化而來,我們首先得學(xué)會Size Classes.
Size Classes將屏幕抽象化,將所有屏幕的寬度和高度分為2類 : Compact-緊湊 , Regular-正常 (其實還有一個Any-任意 , Any就是Compact和Regular的任意組合)
下方的表格是各種機型的寬-高分類 , 也就是說每個機型都是Compact和Regular的組合 (例如 : iPhone X 就是Compact-Regular , 緊湊的寬度,正常的高度)
寬-高分類 iPad iPhone Plus iPhone X iPhone 4.7英寸 iPhone 4英寸 iPhone 3.5英寸
豎屏 Regular-Regular Compact-Regular Compact-Regular Compact-Regular Compact-Regular Compact-Regular
橫屏 Regular-Regular Regular-Compact Compact-Compact Compact-Compact Compact-Compact Compact-Compact


2.Vary For Traits (在Interface Builder中使用)

(1) 剛打開新IB界面時,默認(rèn)是Any-Any(任意-任意)的模式, 此時添加的的約束, 在任意機型下都是通用的. (也就是給所有機型添加同樣的約束)
剛打開IB時
(2) 點擊上圖中的View as iPhone 8,就可以打開Vary For Traits,我們可以看到包含各種型號的iPad,還有5.8英寸, 5.5英寸, 4.7英寸, 4.0英寸, 3.5英寸的iPhone的代表機型,還有橫豎屏
打開后的樣子
(3) 點擊上圖中的Vary for Traits就可以啟用Vary for Traits了, 如下圖 , 啟用的時候需要選擇勾選Width和Height, 這意味著你以選中的機型的Width或者Height為基準(zhǔn)進(jìn)行適配, 這里就用到了我們上面所講的Size Classes了.

例如 : 我選擇了iPhone 8 Plus(8P的豎屏是Compact-Regular,緊湊-正常) , 并且勾選了Width和Height , 就意味著我將適配所有寬度是緊湊,高度是正常的機型,在下圖上可以看到,寬度是緊湊,高度是正常的機型有16款, 接下來我們所添加的約束, 將適用于這16款機型 , 這包括了所有iPhone的豎屏.

啟用Vary for Traits

(4) 添加完約束后, 點擊Done Varying就可以完成這次適配了.

緊接上面的例子 : 點擊Done Varying你就適配好了iPhone的所有豎屏 , 如果你想為所有的iPhone適配橫屏, 你需要選擇一款高度為緊湊的機型, 然后啟用Vary for Traits , 然后勾選高度(Baes On Height), 然后添加約束,然后Done Varying完成 . (從最上方的表格中,我們可以看出所有iPhone的橫屏的高度都是緊湊的, 所有iPhone的豎屏的高度都是正常的)


添加完約束之后
(5) 適配完成之后的效果圖如下,同一個View可以有不同的位置,不同的顏色,甚至不同的行為
Vary for Traits.gif

3.注意

如果你按上面的步驟操作了一遍,發(fā)現(xiàn)并沒有成功的給不同的機型添加了不同的約束,那么你就要注意了,這可能是Xcode的一個Bug導(dǎo)致的,在啟用Vary for Traits前,你需要把先換成橫屏,然后在換成豎屏,然后在啟用Vary for Traits , 這才能真正的添加不同的約束.

最后附上官方文檔地址, 學(xué)習(xí)新的東西還是建議去官方文檔上看, 所以學(xué)好英文還是很重要的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容