Autolayout-Autoresizing與Autolayout

作者:Mitchell 

一.關于iPhone屏幕的一些基本常識###

1.ios屏幕適配的尺寸####

  • iPhone的尺寸
    3.5inch、4.0inch、4.7inch、5.5inch
  • iPad的尺寸
    7.9inch、9.7inch

2.點和像素的關系####

  • 非retina屏幕之中:
    • 1個點由1x1個像素組成
  • 在retina屏幕之中:
    • 1個點由2x2個像素組成(iPhone6Plus 3x3個)

二、Autoresizing###

1、簡介####

  • 在Autolayout之前,可做屏幕適配,但是有很大局限性。

2、具體使用方法以及局限性####

(1)用法#####
  • Autoresizing的核心用法就是6條線。上線左右以及空間內的兩條紅色交叉線如圖:


    屏幕快照 2015-08-01 下午1.37.11.png
  • 具體用法:上下左右四條紅色的線分別表示此視圖距離父視圖的上下左右邊的約束各式多少;
  • 中間兩條上下交叉的線表示,此視圖的高度與寬度是否隨著父視圖的變化而按比例變化
(2)局限性#####

可以清楚的看到上面的用法中所說明的,所有的約束都是相對于父視圖來設置的,也就是Autoresizing的局限性'就是'只能表現父與子的關系而無法表達兄弟視圖之間的關系,這就是Autoresizing的雞肋所在。


三、Autolayout###

1、簡介####

  • Autolayout是一種布局技術,專門用來布局UI界面的
  • Autolayout自iOS6開始引入,由于Xcode4的不給力,當時并沒有得到很大的推廣
  • 在iOS7(Xcode5)開始,Autolayout的開發效率得到很大的提升
  • 蘋果官方也推薦開發者盡量使用Autolayout來布局UI界面
  • Autolayout能輕松的解決屏幕適配的問題

2、核心概念####

  • 參照
  • 約束

3、常用版面####

(1) 約束處理(resolve auto layout issues):#####
  • 界面樣式:
    屏幕快照 2015-08-01 下午6.53.09.png
  • 屬性說明:
    (1) Selected Views:已選中視圖的屬性
    • Update Frames:更新frame
    • Update Constraints:更新約束
    • Add Missing Constraints:添加丟失的約束
    • Reset to Suggested Constraints:將約束重置成建議的樣式

(2) All Views inView Controller:在控制器中的所有視圖的屬性
- Clear Constraints 刪除控制器中所有的約束(慎用)

(2) 相對處理(Pin):#####
  • 界面樣式:


    屏幕快照 2015-08-01 下午6.53.01.png
  • 屬性說明:
    • Add New Constraints:
      4個方向,4條紅線的意思分別表示:距離上下左右的參照線的距離是多少。將虛線設置為實線之后,表示所設距離生效。
      注意:上下左右的參照物是可以改變的,改變的方法就是點擊數字框右邊的向下箭頭來修改約束的參照物。
    • Constrain to margins:如果你點了constrain to margins,左右會有8個點的空擋,而是從8個點后開始計算約束,而沒有點時,已屏幕的0點開始計算。
(3) 對齊處理(Align):#####
  • 界面樣式:


    屏幕快照 2015-08-01 下午6.52.55.png
  • 屬性說明:
    • Leading Edges:左對齊
    • Trailing Edges:右對齊
    • Top Edges:上對齊
    • Bottom Edges:下對齊
    • Horizontal Centers:水平中心對齊
    • Vertical Centers:豎向中心對齊
    • Baselines:基線對齊
    • Horizontal Center in Container:對齊容器中的水平中心
    • Vertical Center in Container:對齊容器中的豎向中心

4、警告與報錯####

  • 警告:一般是黃色的,一般是由于我們當前所設的約束與當前視圖的位置不符。
  • 報錯:紅色的警告一般是由于約束錯誤造成的,這種警告工程中一定要消除。

5、簡單需求實例####

  • 實例一:
    • 需求:創建一個view使得它與上方的距離20,左方的距離20,高100,寬100
    • 實現:


      實例1.png

實例1.2.png

兩張圖片的區別就是在Update Frames 中選擇了Items of New Constraints 這個屬性的意思是當我選擇了這個屬性之后,系統會在添加約束的同時自動將視圖布局到約束所定義的位置與大小。

  • 實例二:
    • 需求:創建兩個view,左邊的view距離左、上各20,右邊的view距離右、上各20,兩個圖片一樣的大小,并且兩張圖片之間的距離是20。


      實例2初始圖.png
    • 思路:
      (1)設置視圖1:距離上面20,距離左邊20Height設為100,這樣視圖1未確定的值就只有寬了,這個時候我們為視圖1添加右邊的約束屬性,如下圖所示,將參照的視圖改為view2,這樣我們就設置好了view1的所有屬性。

      實例2-1.png

      (2)設置視圖2:與視圖1的上方平齊,距離右邊20,與視圖1等高,距離視圖1的距離是20,最后再設置兩個視圖是等寬,這樣就實現了我們的需求:

    • 實現:
      (1)視圖一設置:


      實例2.1.png

      (2)視圖二設置:


      實例2.2.png

      (3)最終實現:
      實例2.png
  • 實例三:
    • 需求:view1使得它與上方的距離20,左方、右方的距離各為20,高50,view2在view1下方距離20,右邊距離父視圖20(與view1右對齊),view2的寬度是view1的一半。
    • 實現:
      (1)先固定view1,設定左右上的約束并設定高為50.
      實例3.1.png

      (2)這個需求的重點是設置view2,首先與view1上方距離20,右邊與view1對齊,那么寬度的設置體現了Autolayout的精華所在。
    • 方案一:先設置view2與view1等寬,之后雙擊view2的等寬的線,將multiplier的值設為0.5。


      實例3.2.png
    • 方案二:
      (1)設置view2的居中對齊


      實例3.3.png

      (2)修改SecondItem中的屬性為Leading,這樣我們就實現了需求中所要的效果


      實例3.4.png

6、AutoLayout核心公式####

第一個Item的屬性 =(<=/>=)第二個Item的屬性*Multiplier+Constant

這就是Autolayout的精華所在.

7、總結####

  • Autoresizing:
    已經是比較過時的設置適配方法了,而且有很大的缺陷,只能設置父子控件之間的約束,不能設置兄弟控件之間的約束。所以在這里我們最好不要再開發中應用。
  • AutoLayout:
    最流行的適配方式,蘋果積極推薦,非常強大好用的適配方法。對提升開發中的效率有很大的幫助。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容