天天看點

自動布局:AutoResizing

一、自動布局推出時間

1,2007.1.9 iPhone ~ 2011.10.4 iPhone 4s時期,隻有一種螢幕不需要自動布局技術。

2,2010.1.27 iPad ,iPad出現以後需要進行橫豎屏切換,這時候出現AutoResizing。

3,2012.9 iPhone 5。iOS6釋出同時釋出iPhone5,推出 AutoLayout 技術。

4,2014.9.10 iPhone 6。iOS8釋出同時釋出iPhone6,推出了 AutoLayout + SizeClasses 技術。

5,2015.9.10 iOS9。iOS9在 AutoLayout + SizeClasses 基礎上,又添加了新的一個UI控件 — UIStackView。

/*
 1. 為什麼要使用自動布局技術:
    - 不适用自動布局技術,我們搭建的UI界面隻能在一種尺寸的螢幕下‘完美’運作,換一個尺寸的螢幕就‘不完美’了
 
 2. 有哪些自動布局的技術?
    - AutoResizing 、 AutoLayout
 
 3. 自動布局技術的發展史:
 
    - 早期iPhone3GS \ iPhone4 \ iPhone4S 螢幕的實體尺寸是一樣的(3.5inch),應用程式沒有橫豎屏切換的要求,是以無需螢幕适配。隻需要設定 Frame 就可以了。
 
    - 後來出了iPad,蘋果要求在 iPad 上運作的程式如果沒有特殊原因,應該支援橫豎屏切換。Frame + AutoResizing 技術應運而生。
        AutoResizing 技術的核心就是:參考父試圖進行布局的限制設定
 
    - iOS6釋出同時釋出iPhone5,不同螢幕尺寸就出現了(4.0inch),是以蘋果就适時推出 AutoLayout 技術。
        AutoLayout 技術的核心就是:不僅能夠參考父試圖還可以參考任意視圖進行布局限制設定。和 AutoResizing 比起來,AutoLayout 功能更加強大,不像 AutoResizing 那樣隻能限制和父試圖之間的位置關系
        但是!由于 4.0 和 3.5 兩種螢幕尺寸雖然發生變化,可螢幕的寬度并沒有發生變化,是以當時應用并不廣泛。
 
    - iOS8釋出同時釋出iPhone6,這一次螢幕尺寸的寬和高都發生了變化,是以就需要一種功能強大的自動布局技術,蘋果适時推出了 AutoLayout + SizeClasses 技術,自此 AutoLayout 技術的使用大範圍鋪開
 
    - iOS9在 AutoLayout + SizeClasses 基礎上,又添加了新的一個UI控件 -- UIStackView。這個控件是幫助我們進行自動布局的控件
 
 重點學習 AutoLayout 技術,學不好 AutoLayout ,學SizeClass 和 UIStackView 是徒勞的
 
 AutoResizing 現在已經應用不多了,它可以完全被AutoLayout所取代。
 
 
 
 */
           

二、什麼時候使用自動布局?

1. 支援不同尺寸的螢幕;

2. 支援橫豎屏切換的時候;

3. iPad 在分屏的時候;

4. iMac 程式在調整視窗大小的時候。

三、在IB(Interface Builder)中使用AutoResizing

1. 禁用AutoLayout:隻有禁用AutoLayout,AutoResizing的配置面闆才能出現,是以在一個IB中隻能使用一種自動布局技術。

特點1:AutoResizing隻能定義視圖和父試圖之間的位置關系。

特點2:外面四根線,勾選:邊距不可變;不勾選:邊距可變。

特點3:裡面兩根線,勾選:寬、高可變;不勾選:寬、高不可變。

四、代碼中使用AutoResizing

使用autoresizingMask屬性來設定四周邊距和寬高是否可變。例如:

// 設定AutoResizing
    redView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
           

尋找 可變的屬性,通過位枚舉做位運算。

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  //下邊距可變
};