iOS使用Autolayout解決橫豎屏控件差別較大

iOS使用Autolayout-SizeClass解決橫豎屏控件位置差別較大情況


需求:

1. 通常橫豎屏轉(zhuǎn)換后如果使用約束會(huì)按照正常的橫豎屏下同一個(gè)約束進(jìn)行布局只恨,但是如果某些APP中橫豎屏控件位置差別較大時(shí)則顯得不適用。

比如控件hello這個(gè)Label在橫屏下為距離父控件頂部為0,橫向垂直于父控件中心如圖1捏题,而在豎屏下如果按照自動(dòng)適配則如圖2,但是如果我們想要它在豎屏為圖3的效果(即距離父控件左邊距離為0肉渴,距離父控件上部距離為100)則需要重新設(shè)計(jì)不同屏幕狀態(tài)下的約束公荧。本例則為解決此類需求

Demo

2. 本例主要使用Autolayout-SizeClass實(shí)現(xiàn)同一控件不同狀態(tài)下的布局,好處是像iPhone橫豎屏風(fēng)格相差較大以及iPhone與iPad同一界面布局相差較大時(shí)我們不需要?jiǎng)?chuàng)建兩個(gè)View同规,因?yàn)檫@兩個(gè)View只是布局不同而功能是完全相同的循狰,所以利用Autolayout可以幫助我們實(shí)現(xiàn)不同狀態(tài)下控件的布局。


適用情況

  • 在iPad Pro上比iPhone SE上的文字字體更大
  • 同一個(gè)View在橫豎屏布局差別較大
  • iPad比iPhone多或者少一些控件及屬性等
  • 當(dāng)應(yīng)用滑動(dòng)或者處于分屏模式布局內(nèi)容有所不同

注意:如上說明券勺,本例為解決橫豎屏绪钥,iPhone及iPad布局相差較大的情況,所以同一控件的功能并沒有改變关炼,僅僅改變布局位置程腹,本文默認(rèn)你認(rèn)為已會(huì)添加普通約束。


GitHub地址(附代碼) : 控件布局Demo

簡(jiǎn)書地址 : 控件布局

博客地址 : 控件布局

掘金地址 : 控件布局


總體流程:

  • 使用xib創(chuàng)建View并開啟Autolayout功能
  • xib中設(shè)置每個(gè)控件橫豎屏下不同的約束

Autolayout - Size Class 簡(jiǎn)介

在這里蘋果官方文檔,Size Class有詳細(xì)的介紹有關(guān)Autolayout-SizeClass的用法儒拂。

在這里不對(duì)Autolayout的普通布局做詳細(xì)介紹了寸潦,如果不會(huì)使用約束請(qǐng)先學(xué)會(huì)后再閱讀。

Size Class 基本功能

  • (Install or uninstall)使用或者不使用一個(gè)View或control.

  • (Install or uninstall)使用或者不使用一條約束

  • 設(shè)置選中屬性的值(例如文字大小社痛,布局等)

  • installed功能 : 當(dāng)系統(tǒng)加載一個(gè)scene時(shí)见转,會(huì)先實(shí)例化所有的views, contorls 和 constraints(約束),然后僅僅當(dāng)這些元素被installed(安裝)才會(huì)顯示在對(duì)應(yīng)的視圖結(jié)構(gòu)中

注意:系統(tǒng)會(huì)保持對(duì)uninstalled元素的引用,因此該元素并沒有被釋放蒜哀。

Regular and Compact

背景

  • 我們通常使用的布局為 wAny hAny 表示各種不同尺寸的機(jī)型均支持

  • 在過去適配iPhone和iPad我們需要?jiǎng)?chuàng)建2個(gè)View當(dāng)它們布局中控件差別較大斩箫,這樣相當(dāng)于有兩個(gè)文件,但是比如控件的點(diǎn)擊事件做的是同一個(gè)操作,這時(shí)我們相當(dāng)于每改動(dòng)一處代碼都需要在iPhone和iPad上做出對(duì)應(yīng)改變乘客,但是隨著機(jī)型大小的多變已經(jīng)iOS 8引入的拆分視圖控制器赊抖,以及iOS 9 引入分屏控制多任務(wù)模式使得操作十分繁瑣。

目的

  • 為了簡(jiǎn)化這些操作寨典,蘋果提出了一種新的規(guī)范氛雪,比起考慮不同設(shè)備機(jī)型尺寸的布局,我們更加關(guān)注兩種類型的寬度(compact and regular) 以及兩種類型的高度(compact and regular).稱他們?yōu)閟ize classes.
以下為各種機(jī)型對(duì)應(yīng)的Size Class耸成,我們可依據(jù)此對(duì)不同機(jī)型及橫豎屏做適配
Size-Class.png

注意:

  • 在橫屏狀態(tài)下报亩,iPhone(除了Plus)仍然被當(dāng)成compact widths.
  • 所有的iPad在橫屏或豎屏模式中都被當(dāng)成regular widths and heights,這也就意味著
    iPad方向改變不會(huì)觸發(fā)size class.

Size Class 不是約束和自動(dòng)布局的代替品井氢,而是讓它們更好的一起工作弦追。

  • 調(diào)整Views視圖或重新定位
  • 字體和顏色能夠改變
  • 約束能夠使用或者不使用(called installed and uninstalled)
  • Views 能選擇添加或移除 (also called installed and uninstalled).

使用步驟

1. 在xib中打開使用Autolayout功能
openAutoLayout.png
2. 使用Autolayout 設(shè)置xib中控件的布局
  • 以橫豎屏為例,先添加橫屏狀態(tài)下Hello Label的一條約束花竞,如圖所示
hello_landscape.png
  • 在添加完約束后默認(rèn)是所有狀態(tài)都支持此約束劲件,則豎屏狀態(tài)下默認(rèn)仍遵守此規(guī)則,豎屏狀態(tài)如圖所示约急。
hello_portraitDefault.png
  • 因此我們首先要將橫屏狀態(tài)的所有約束依次設(shè)置為只有橫屏狀態(tài)支持零远,而豎屏不支持,則按照?qǐng)D中所示操作即可厌蔽。
onlyLandscapeSupport.png
  • 然后再切換到豎屏狀態(tài)重新添加豎屏狀態(tài)需要的約束并設(shè)置每一條約束為僅豎屏狀態(tài)支持牵辣。
onlyPortrait.png

注意,當(dāng)打開AutoLayout功能后奴饮,在xib中很多屬性左邊會(huì)有如上的加號(hào)按鈕纬向,這些即都可通過加號(hào)按鈕控制不同狀態(tài)下控件的一些屬性,原理正如上所講戴卜,其他情況可自行研究

補(bǔ)充 :

1.為同一條約束賦不同的值

DiffValue.png

2.同一控件不同狀態(tài)下的顏色逾条,陰影,隱藏狀態(tài)等等

portraitOther.png

參考文章:蘋果官方文檔投剥,Size Class

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末师脂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子薇缅,更是在濱河造成了極大的恐慌危彩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泳桦,死亡現(xiàn)場(chǎng)離奇詭異汤徽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灸撰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門谒府,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陈哑,“玉大人瘾杭,你說我怎么就攤上這事。” “怎么了乾忱?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵祝峻,是天一觀的道長(zhǎng)京髓。 經(jīng)常有香客問我斩启,道長(zhǎng),這世上最難降的妖魔是什么芳誓? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任余舶,我火速辦了婚禮,結(jié)果婚禮上锹淌,老公的妹妹穿的比我還像新娘匿值。我一直安慰自己,他們只是感情好赂摆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布挟憔。 她就那樣靜靜地躺著,像睡著了一般烟号。 火紅的嫁衣襯著肌膚如雪绊谭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天褥符,我揣著相機(jī)與錄音龙誊,去河邊找鬼抚垃。 笑死喷楣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹤树。 我是一名探鬼主播铣焊,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼罕伯!你這毒婦竟也來了曲伊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤追他,失蹤者是張志新(化名)和其女友劉穎坟募,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邑狸,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懈糯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了单雾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赚哗。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡她紫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屿储,到底是詐尸還是另有隱情贿讹,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布够掠,位于F島的核電站民褂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疯潭。R本人自食惡果不足惜助赞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袁勺。 院中可真熱鬧雹食,春花似錦、人聲如沸期丰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钝荡。三九已至街立,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埠通,已是汗流浹背赎离。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留端辱,地道東北人梁剔。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舞蔽,于是被迫代替她去往敵國(guó)和親荣病。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容