iOS8开发~UI布局(一)初探Size Class
隨著iOS8系統(tǒng)的發(fā)布,一個全新的頁面UI布局概念出現(xiàn),這個新特性將顛覆包括iOS7及之前版本的UI布局方式,這個新特性就是Size Class。Size Class配合Auto Layout可以解決所有(包括iPhone及iPad)iOS設(shè)備屏幕尺寸及屏幕旋轉(zhuǎn)時候的UI適配問題 。
二、為什么要使用Size Class
直到iPhone6發(fā)布后,目前iOS設(shè)備的屏幕尺寸已經(jīng)有4種了,如圖:
iPhone6沒出現(xiàn)之前,還可以通過代碼來適配兩種尺寸的UI,但iPhone6發(fā)布后,漸漸的發(fā)現(xiàn)以前的方式可能真的要淘汰了,因為以后可能還要面對更多的屏幕尺寸。顯然硬編碼UI的Frame的時代要過去了,要使用Auto Layout了。
自從iOS6開始就引入了Auto Layout,但一直沒用推廣使用,原因有很多(例如:Auto Layout本身不是很成熟、硬編碼可以解決iPhone僅有兩種屏幕尺寸的UI適配、iPhone項目和iPad項目分開來進行等)。
Size Class是配合Auto Layout來使用的,讓Auto Layout方式變得不那么復(fù)雜。
三、該如何使用Size Class
要使用Size Class,首先要安裝最新的Xcode6,新建一個Single View Application template項目,選擇Main.storyboard-> View,查看Inspector屬性:
默認Size Classes就已經(jīng)使用了,當然如果不想使用它也可以關(guān)掉,然后使用舊的布局方式。但如果選擇使用Size Class,然后關(guān)掉Auto Layout,Xcode會彈出一個警告框:(稍后就會明白為什么!)
選擇cancel,因為接下來要使用Size Classes。
Size Classes其實就是將iOS設(shè)備屏幕的Size進行分類,如何分類的呢?
對于iOS設(shè)備(無論iPhone還是iPad),寬度和高度都各分為3種情況:緊湊(Compact)、規(guī)則(Regular)、任何(Any)
其中“任何”(Any)包含緊湊(Compact)、規(guī)則(Regular)類型。如果屏幕寬度用w表示,高度用h表示,那么w(Regular)/h(Regular)組合就是iPad屏幕尺寸(size)的類別(class),無論iPad橫屏還是豎屏,屏幕尺寸類別都是w(Regular)/h(Regular),上圖可以很清楚的表達。
官網(wǎng)也列舉了一些:
? ?
?
到這里應(yīng)該明白了,Size Classes是將屏幕尺寸的種類做了進一步的抽象。那有一個問題,分類的有什么用?該怎么用啊?
以前為不同的iOS設(shè)備尺寸或者同尺寸橫豎屏不同適配UI,都要根據(jù)實際情況而去計算frame。使用Size Classes是根據(jù)當前的屏幕size類型而使用Auto Layout方式進行布局了,要摒棄之前計算frame的思路,而改用相對布局的思維去思考(實際上還是要計算frame)。
而且Xcode6最大的突破也是這里,不在需要建立不同尺寸的storyboard了,只要建立一個,然后修改其view的size就可以做各種屏幕尺寸的適配,如下:
例如我要做iPad頁面設(shè)計,就設(shè)置成w (Regular)/h(Regular)
然后同樣的工程,又要兼容橫屏的iPhone6 plus,就可以把view的size class設(shè)置成:w (Regular)/h(Compact),然后繼續(xù)適配
然后當程序跑在不同的設(shè)備上,或者設(shè)備橫屏和豎屏切換,就能顯示相應(yīng)的UI了。
說了這么多,還是動手實驗一下吧:
適配iPhone6,在RootViewController的view上添加一個新的view,讓這個新的view無論屏幕橫屏還是豎屏時候都距離其superview的邊緣50點寬,并且橫屏時候為綠顏色,豎屏時候為紅顏色。
1、新建項目(剛剛已經(jīng)新建了一個AL8的項目,不重復(fù)步驟了)
2、切換size class為wCompact/hRegular模式
并且添加一個view,不用管其frame,并設(shè)置其背景色為紅色
接下來選中紅色的view,然后點擊Xcode頂部工具欄的Editor-Pin,然后分別添加紅色view相對superview邊框的約束(上下左右)
添加約束的過程中會看到約束的線是黃顏色,表明當前的約束還不能確定view的frame,需要繼續(xù)添加,當添加完4個約束后,約束線的顏色是藍色的,表明當前約束是正確的。
然后選中約束,設(shè)定約束的值(我們不是想讓新的view距離其superview邊界50點寬嗎!),4個約束都要設(shè)置。
設(shè)置完后點擊下view會自動更新frame,應(yīng)該是這樣的:
3、切換size class為wRegular/hCompact模式,然后重復(fù)第二步中的設(shè)置,區(qū)別是新添加的view背景顏色設(shè)置為綠色。
4、大功告成,用模擬器運行下吧,模擬器要選擇iPhone6 plus哦!然后旋轉(zhuǎn)屏幕看看是不是我們想要的效果!
思考:把模擬器切換為iPhone6、iPhone5、iPhone4s、iPad會有什么現(xiàn)象!下一篇會解釋!
Demo下載?
總結(jié)
以上是生活随笔為你收集整理的iOS8开发~UI布局(一)初探Size Class的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AutoLayout ScrollVie
- 下一篇: iOS8开发~UI布局(二)storyb