1. 程式人生 > >iOS-原生純代碼約束總結(一)之 AutoresizingMask

iOS-原生純代碼約束總結(一)之 AutoresizingMask

控件 總結 關系 註意 設置 不同 純代碼 self. tro

一,概述

iOS有兩大自動布局利器:autoresizing 和 autolayout(autolayout是IOS6以後新增)。autoresizing是UIView的屬性,一直存在,使用也比較簡單,但是沒有autolayout那樣強大。如果你的界面比較簡單,要求的細節沒有那麽高,那麽你完全可以使用autoresizing去進行自動布局。 autoresizing是iOS開發中傳統的布局模式。通過它可以設計控件與其父視圖的變換關系。通過它,當父視圖frame變換時,子視圖會自動的做出相應的調整。

     @property(nonatomic) UIViewAutoresizing autoresizingMask;    // simple resize. default is UIViewAutoresizingNone

二,屬性說明及使用

(1) 屬性說明

typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {

UIViewAutoresizingNone = 0, //不會隨父視圖的改變而改變
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, //自動調整view與父視圖左邊距,以保證右邊距不變
UIViewAutoresizingFlexibleWidth = 1 << 1, //自動調整view的寬度,保證左邊距和右邊距不變
UIViewAutoresizingFlexibleRightMargin = 1 << 2, //自動調整view與父視圖右邊距,以保證左邊距不變
UIViewAutoresizingFlexibleTopMargin = 1 << 3, //自動調整view與父視圖上邊距,以保證下邊距不變
UIViewAutoresizingFlexibleHeight = 1 << 4, //自動調整view的高度,以保證上邊距和下邊距不變
UIViewAutoresizingFlexibleBottomMargin = 1 << 5, //自動調整view與父視圖的下邊距,以保證上邊距不變

}

註意:在這裏說明一下,如果是經常使用Storyboard/Xib設置autoresizing,那麽轉變使用代碼設置autoresizing的話,容易出現理解錯誤問題。比如說UIViewAutoresizingFlexibleTopMargin,也許會被誤認為是頂部距離不變,其實是底部距離不變。這個解決辦法也很簡單,只需要把使用代碼和使用Storyboard設置autoresizing,它們是相反的,只需要這樣去記就可以了。

(2)autoresizing組合使用

也就是枚舉中的值可以使用|隔開,同時擁有多個值的功能,可以針對不同的場景作不同的變化。例如:

  UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin

意思是:view的寬度按照父視圖的寬度比例進行縮放,距離父視圖頂部距離不變。

(3)其它
想要讓自定義控件在轉屏後,同樣居中對齊,只需設置該自定義UIView與父視圖的左邊距和右邊距的比例不變,上邊距和下邊距的比例不變。 在自定義控件中添加以下代碼:
self.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin UIViewAutoresizingFlexibleLeftMargin   | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

三,nib文件中可視化設置自動布局

在storyboard中我們可以更加輕松的進行autoresizing自動布局。在view設置欄中有autoresizing這個設置,點中相應的箭頭,就是剛才我們探討的設置選項。並且我們把鼠標放在這個上面的時候,右側會自動為我們預覽效果。

autoresizing可以滿足大部分簡單的自動布局需求,可是它有一個致命的缺陷它只能設置子視圖相對於父視圖的變化,卻不能精確這個變化的度是多少,因此對於復雜的精準的布局需求,它就力不從心了。但iOS6之後的autolayout自動布局方案,可以解決復雜的布局。






iOS-原生純代碼約束總結(一)之 AutoresizingMask