0.Autoresizing設置
1. Autoresizing特性
當UIView的autoresizesSubviews是YES時,(默認是YES);
那么在其中的子view會根據它自身的autoresizingMask屬性,
來自動適應其與superView之間的位置和大小。
autoresizingMask是一個枚舉類型, 默認是UIViewAutoresizingNone
, 也就是不會autoresize;
這個枚舉類型,使用了 1 << n;
這樣的寫法來定義,代表了它可以復選。如果你不明白為什么,可以復習下“位運算”。 那么這些值分別代表什么意思呢?
其實如何理解這幾個值很簡單,那就是從xib里面看。 我們在一個xib文件中,取消勾選autolayout
,(默認使用autolayout時,autoresizing看不到)。那么我們可以在布局那一欄看到如何設置autoresizing
.

上圖說明了在xib中設置的這些線條和實際屬性對應的關系,這其中需要注意的是,其中4個margin虛線才代表設置了該值,而width和height是實線代表設置了該值,不能想當然的理解。
這些項分別代表:
UIViewAutoresizingNone view的frame不會隨superview的改變而改變
UIViewAutoresizingFlexibleLeftMargin 自動調整view與superview左邊的距離保證右邊距離不變
UIViewAutoresizingFlexibleWidth 自動調整view的寬,保證與superView的左右邊距不變
UIViewAutoresizingFlexibleRightMargin 自動調整view與superview右邊的距離保證左邊距不變
UIViewAutoresizingFlexibleTopMargin 自動調整view與superview頂部的距離保證底部距離不變
UIViewAutoresizingFlexibleHeight 自動調整view的高,保證與superView的頂部和底部距離不變
UIViewAutoresizingFlexibleBottomMargin 自動調整view與superview底部部的距離保證頂部距離不變
以上這些都較易理解, 但是autoresizing還有一些組合場景。
那就是組合使用的場景。
autoresizingMask
說明
xib預覽效果
None
view的frame不會隨superview的改變而改變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)

TopMargin | BottomMargin
view與其superView的上邊距和下邊距的比例維持不變

LeftMargin | RightMargin
view與其superView的左邊距和右邊距的比例維持不變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)

LeftMargin | RightMargin | TopMargin | BottomMargin
view與其superView的上下左右邊距的比例維持不變

LeftMargin | Width
view與其superView的右邊距的比例維持不變, 左邊距和width按比例調整(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)

LeftMargin | Width | RightMargin
左邊距、右邊距、寬按比例調整,(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)垂直方向是同樣效果,故不列舉

Width | Height
自動調整view的寬和高,保證上下左右邊距不變。如把tableView設置為此屬性,那么無論viewController的view是多大,都能自動鋪滿

上面并未列舉所有組合場景,但是已經足夠我們理解 autoresizing
了。
- 小結
Autoreszing的最常見的實用場景就是iPhone5的兼容了。比如我們想要設置tableView的frame,那我們只需要在初始化設置frame之后將tableView的autoresizingMask設置為UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight
就行了。
另一種比如我們想要一個view一直停留在其superview的最下方,那么我們在初始化設置frame之后只需要將autoresizingMask設置為UIViewAutoresizingFlexibleTopMargin
就可以了。
autorezingMask簡單的一個屬性,理解它之后可以讓很多事情變得簡單。