一、自動布局推出時間
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 //下邊距可變
};