iOS學(xué)習(xí)筆記24-不斷進(jìn)化的屏幕適配

一道宅、屏幕適配

iOS的屏幕適配可以分為3大塊魏滚,代表著不同時(shí)期的屏幕適配主流:

  1. AutoResizing:
    在iOS6之前,完全能夠勝任谦秧,因?yàn)楫?dāng)時(shí)蘋(píng)果只有3.5寸屏,加上比較少的支持橫屏撵溃,它有非常大的局限性:只能相對(duì)于父控件布局
  1. AutoLayout:
    在iOS6之后疚鲤,蘋(píng)果多了幾個(gè)尺寸屏幕,AutoResizing已經(jīng)無(wú)能為力了缘挑,這時(shí)候蘋(píng)果推出了AutoLayout集歇,功能十分強(qiáng)大,可以再任意兩個(gè)控件之間建立布局關(guān)系语淘,也是現(xiàn)在的主流鬼悠。
  2. SizeClass:
    隨著iOS8系統(tǒng)的發(fā)布,一個(gè)全新的頁(yè)面UI布局概念出現(xiàn)了亏娜,顛覆了之前版本的UI布局方式焕窝,這個(gè)特性就是SizeClass,SizeClass配合AutoLayout可以解決所有iOS設(shè)備屏幕UI適配問(wèn)題

下面我們來(lái)一個(gè)一個(gè)了解维贺,因?yàn)樯婕暗経I布局它掂,可能圖片或者GIF比較多,大家要有心理準(zhǔn)備溯泣。

二虐秋、AutoResizing【iOS6之前使用】

這個(gè)已經(jīng)被時(shí)代所淘汰的界面UI適配方式,現(xiàn)在就只是簡(jiǎn)單的了解下垃沦,也好為下面的AutoLayout出現(xiàn)說(shuō)明時(shí)代背景客给。
AutoResizing的功能只能相對(duì)于父控件布局:

AutoResizing

在用autoResizing的時(shí)候需要關(guān)閉autoLayoutsizeclass(如果是用xcode6)
他們之間是互相沖突的

上面有6根線,分別對(duì)應(yīng)下方的6個(gè)枚舉:
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
    UIViewAutoresizingNone                 = 0, 
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
  1. 四周4根線是用來(lái)設(shè)置當(dāng)前View距離父控件的上下左右的距離是否固定
  1. 中間2根線是用來(lái)設(shè)置當(dāng)前View是否隨父控件自適應(yīng)調(diào)整寬度和高度

可以看到肢簿,上面的設(shè)置只能設(shè)置當(dāng)前控件和父控件之間的布局靶剑,無(wú)法實(shí)現(xiàn)兄弟控件之間的布局蜻拨,例如:如果我想讓2個(gè)控件View之間的間隔固定,使用AutoResizing是無(wú)法實(shí)現(xiàn)的桩引。

二缎讼、AutoLayout【iOS6之后使用】

因?yàn)锳utoResizing的種種局限已經(jīng)無(wú)法滿足iOS6之后新出的不同尺寸屏幕的需求,做iOS開(kāi)發(fā)的好處就是有一個(gè)很好的東家坑匠,蘋(píng)果不僅很重視用戶體驗(yàn)血崭,而且對(duì)開(kāi)發(fā)者也很友好,例如ARC厘灼、AutoLayout夹纫。
AutoLayout是現(xiàn)在使用的主流屏幕適配方式,它可以在任意兩個(gè)控件之間建立布局關(guān)系设凹,可以是父子View捷凄,也可以是兄弟View,功能強(qiáng)大很多围来,學(xué)習(xí)成本也高了不少跺涤。

使用AutoLayout:
使用AutoLayout

AutoLayout設(shè)置
AutoLayout設(shè)置界面有3個(gè):
  1. 對(duì)齊布局界面
  1. 相對(duì)布局界面
  2. 約束管理界面

1. 對(duì)齊布局界面:

點(diǎn)擊右下角的類(lèi)似樓梯的按鈕


對(duì)齊布局界面
可以分為3個(gè)功能部分:
  1. 上面4個(gè)是控件邊界對(duì)齊布局
  1. 中間3個(gè)是控件中心對(duì)齊布局
  2. 下面2個(gè)是父子控件中心對(duì)齊布局

上面7個(gè)對(duì)齊布局,需要選擇多個(gè)View進(jìn)行設(shè)置监透。

2. 相對(duì)布局界面

點(diǎn)擊右下角的正方形按鈕


autolayout3.png
分為4個(gè)功能部分:
  1. 最上面的是相對(duì)附近控件距離設(shè)置
  1. Width和Height是設(shè)置控件的寬高
  2. 緊接著下面3個(gè)是多個(gè)控件之間的等寬等高約束
  3. 最下面的是對(duì)齊設(shè)置桶错,這個(gè)功能和上面的對(duì)齊布局界面功能重復(fù)

3. 約束管理界面

點(diǎn)擊右下角的小三角按鈕:


約束管理界面
分為2個(gè)大功能區(qū)域:
  1. 分割線上面的是選中View的約束管理,最常用的是Updata Frames
  1. 分割線下面的是容器中所有的View的約束管理胀蛮,最常用的也是Updata Frames

4. 通過(guò)control按鍵配合拖線也可以做AutoLayout

Control按鍵配合拖線實(shí)現(xiàn)AutoLayout

5. 修改約束

界面右邊會(huì)有約束列表:



雙擊其中一個(gè)約束院刁,進(jìn)入修改約束界面:


大概意思可以理解為:
FirstItem = SecondItem * Multiplier + Constant 
view1.width = view2.width * 1 + 0 
-> view1.width = view2.width

三、AutoLayout實(shí)踐

AutoLayout實(shí)踐例子說(shuō)明:
  1. 兩個(gè)View等寬等長(zhǎng)
  1. 兩個(gè)View距離屏幕水平中心距離相等
  2. 兩個(gè)View距離父控件的左右邊界距離固定
最終效果圖:
豎屏效果
橫屏效果

1. 設(shè)置2個(gè)View等寬等高

2. 設(shè)置藍(lán)色View左右距離

3. 設(shè)置藍(lán)色View到父控件中心Y軸的距離

4. 設(shè)置紅色View到父控件中心Y軸的距離【記住是負(fù)的】

5. 設(shè)置紅色View左右距離

6. 設(shè)置藍(lán)色View的高度

6.png

7. 使用更新界面

8. 最終效果

四粪狼、SizeClass

SizeClass就是對(duì)屏幕尺寸進(jìn)行了抽象退腥,不再拘泥于具體的尺寸,因?yàn)槌叽缫恢倍荚谧兓匍绻覀儼凑粘叽缛ミm配狡刘,一定會(huì)很累。

SizeClass對(duì)屏幕進(jìn)行了抽象分類(lèi):
  1. compact:緊湊-小
  1. Any:任意
  2. Regular:寬松-大
總結(jié)幾點(diǎn):
  • SizeClass只是對(duì)屏幕進(jìn)行了抽象分類(lèi)困鸥,具體屏幕適配還是要使用AutoLayout來(lái)進(jìn)行嗅蔬。
  • 沒(méi)有了橫豎屏的概念,也沒(méi)有了具體尺寸的概念疾就,就不必理會(huì)具體設(shè)備是什么
  • 寬度和高度都抽象為上面的3種澜术,3*3一共就是9種類(lèi)型,但不是9種屏幕尺寸

所以使用了SizeClass的Xcode的storyboard變成了這個(gè)樣子:



下方還變成了這樣:



具體解析看下圖:

比如iPhone的豎屏猬腰,它是這么抽象的:


五鸟废、SizeClass使用實(shí)例

以前看來(lái)有這樣一個(gè)變態(tài)的要求:

有個(gè)View是100*100的,在iPhone豎屏是居于左上角姑荷,橫屏?xí)r在右下角盒延,是iPad時(shí)它在正中間

現(xiàn)在用SizeClass可以簡(jiǎn)單實(shí)現(xiàn):
處理iPhone豎屏:

先用SizeClass固定屏幕為iPhone豎屏:compactWith | RegularHeight


添加約束缩擂,讓View寬度、高度都為100兰英,距離左上角都是20撇叁,再UpdataFrames:

后面的都類(lèi)似這樣處理供鸠,只不過(guò)需要選對(duì)正確的SizeClass畦贸,這里就不啰嗦了。

除了這個(gè)楞捂,iOS8加了SizeClass后薄坏,一些控件也多了一些屬性,例如:


在右邊的菜單區(qū)域可以看到:installed寨闹,這個(gè)是用來(lái)控制改控件什么情況下顯示胶坠,當(dāng)前什么都沒(méi)約束,表示Any * Any繁堡,就是不管是iphone什么尺寸還是ipad什么尺寸都可以顯示沈善,點(diǎn)擊左邊的小加號(hào)+可以用sizeclass控制什么情況顯示;同樣的還有字體椭蹄、圖片顯示:


看完是不是覺(jué)得原來(lái)storyboard可以這么玩闻牡!(o)/~
該筆記大部分內(nèi)容來(lái)自:博客園 隨遇不安的博客,感謝他的分享绳矩。
有什么問(wèn)題可以在下方的評(píng)論區(qū)提出罩润,O(∩_∩)O哈!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翼馆,一起剝皮案震驚了整個(gè)濱河市割以,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌应媚,老刑警劉巖爽航,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異延届,居然都是意外死亡晓褪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)扎筒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)莱找,“玉大人,你說(shuō)我怎么就攤上這事嗜桌“履纾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵骨宠,是天一觀的道長(zhǎng)浮定。 經(jīng)常有香客問(wèn)我相满,道長(zhǎng),這世上最難降的妖魔是什么桦卒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任立美,我火速辦了婚禮,結(jié)果婚禮上方灾,老公的妹妹穿的比我還像新娘建蹄。我一直安慰自己,他們只是感情好裕偿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布洞慎。 她就那樣靜靜地躺著,像睡著了一般嘿棘。 火紅的嫁衣襯著肌膚如雪劲腿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天鸟妙,我揣著相機(jī)與錄音焦人,去河邊找鬼。 笑死重父,一個(gè)胖子當(dāng)著我的面吹牛花椭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坪郭,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼个从,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了歪沃?” 一聲冷哼從身側(cè)響起嗦锐,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沪曙,沒(méi)想到半個(gè)月后奕污,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡液走,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年碳默,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缘眶。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘱根,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出巷懈,到底是詐尸還是另有隱情该抒,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布顶燕,位于F島的核電站凑保,受9級(jí)特大地震影響冈爹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欧引,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一频伤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芝此,春花似錦憋肖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)婚肆。三九已至租副,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間较性,已是汗流浹背用僧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赞咙,地道東北人责循。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像攀操,于是被迫代替她去往敵國(guó)和親院仿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 前言 iPhone自誕生以來(lái)排惨,隨著其屏幕尺寸不斷的多樣化,屏幕適配的技術(shù)一直在發(fā)展更新碰凶。目前暮芭,iOS系統(tǒng)版本已經(jīng)更...
    VV木公子閱讀 15,380評(píng)論 24 170
  • 屏幕適配 本章節(jié)主要還是說(shuō)明如何讓?xiě)?yīng)用程序能夠適配在蘋(píng)果不同的屏幕和如何讓?xiě)?yīng)用中的內(nèi)容在不同的屏幕下能夠正常的放置...
    AlanGe閱讀 698評(píng)論 0 2
  • 1.尺寸適配1.原因 iOS7中所有導(dǎo)航欄都為半透明,導(dǎo)航欄(height=44)和狀態(tài)欄(height=20)不...
    LZM輪回閱讀 6,109評(píng)論 1 4
  • 一欲低、屏幕適配-autoresizing簡(jiǎn)單使用 1辕宏、為什么要屏幕適配? > iphone手機(jī)屏幕尺寸呈現(xiàn)多樣化砾莱。 ...
    方圓十里不留母狗閱讀 523評(píng)論 0 0
  • 翻譯自“Auto Layout Guide”瑞筐。 1 入門(mén) 1.1 理解自動(dòng)布局 自動(dòng)布局根據(jù)視圖層級(jí)結(jié)構(gòu)中視圖上的...
    lakerszhy閱讀 3,580評(píng)論 3 26