前言
Vary For Traits 直接翻譯過來就是因設(shè)備而異, 就是專門為適配而生的.
Xcode 8 之后的適配開始使用了Vary For Traits了, Vary For Traits可以讓我們很方便的適配iPad和iPhone的各種機型龄寞、橫豎屏耽装、分屏等 (關(guān)于橫豎屏的使用,可以看我的另一篇簡書) , 下面讓我們正式開始學(xué)習Vary For Traits.
(學(xué)習這個之前最好有AutoLayout的基礎(chǔ),以便去添加約束)
1.Size Class
Vary For Traits 是基于Size Classes進化而來,我們首先得學(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界面時,默認是Any-Any(任意-任意)的模式, 此時添加的的約束, 在任意機型下都是通用的. (也就是給所有機型添加同樣的約束)
(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為基準進行適配, 這里就用到了我們上面所講的Size Classes了.
例如 : 我選擇了iPhone 8 Plus(8P的豎屏是Compact-Regular,緊湊-正常) , 并且勾選了Width和Height , 就意味著我將適配所有寬度是緊湊,高度是正常的機型,在下圖上可以看到,寬度是緊湊,高度是正常的機型有16款, 接下來我們所添加的約束, 將適用于這16款機型 , 這包括了所有iPhone的豎屏.
(4) 添加完約束后, 點擊Done Varying就可以完成這次適配了.
緊接上面的例子 : 點擊Done Varying你就適配好了iPhone的所有豎屏 , 如果你想為所有的iPhone適配橫屏, 你需要選擇一款高度為緊湊的機型, 然后啟用Vary for Traits , 然后勾選高度(Baes On Height), 然后添加約束,然后Done Varying完成 . (從最上方的表格中,我們可以看出所有iPhone的橫屏的高度都是緊湊的, 所有iPhone的豎屏的高度都是正常的)
(5) 適配完成之后的效果圖如下,同一個View可以有不同的位置,不同的顏色,甚至不同的行為
3.注意
如果你按上面的步驟操作了一遍,發(fā)現(xiàn)并沒有成功的給不同的機型添加了不同的約束,那么你就要注意了,這可能是Xcode的一個Bug導(dǎo)致的,在啟用Vary for Traits前,你需要把先換成橫屏,然后在換成豎屏,然后在啟用Vary for Traits , 這才能真正的添加不同的約束.
最后附上官方文檔地址, 學(xué)習新的東西還是建議去官方文檔上看, 所以學(xué)好英文還是很重要的.