1. Autoresizing特性
當(dāng)UIView的autoresizesSubviews是YES時(shí),(默認(rèn)是YES), 那么在其中的子view會(huì)根據(jù)它自身的autoresizingMask屬性來(lái)自動(dòng)適應(yīng)其與superView之間的位置和大小。autoresizingMask是一個(gè)枚舉類型, 默認(rèn)是UIViewAutoresizingNone, 也就是不會(huì)autoresize:
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, // 將1的二進(jìn)制左移0位
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
其實(shí)如何理解這幾個(gè)值很簡(jiǎn)單,那就是從xib里面看。 我們?cè)谝粋€(gè)xib文件中,取消勾選autolayout,(默認(rèn)使用autolayout時(shí),autoresizing看不到)。那么我們可以在布局那一欄看到如何設(shè)置autoresizing.

上圖說(shuō)明了在xib中設(shè)置的這些線條和實(shí)際屬性對(duì)應(yīng)的關(guān)系,這其中需要注意的是,其中4個(gè)margin虛線才代表設(shè)置了該值,而width和height是實(shí)線代表設(shè)置了該值,不能想當(dāng)然的理解。
這些項(xiàng)分別代表:
autoresizingMask是子視圖的左、右、上、下邊距以及寬度和高度相對(duì)于父視圖按比例變化,例如:
UIViewAutoresizingNone 不自動(dòng)調(diào)整。
UIViewAutoresizingFlexibleLeftMargin 自動(dòng)按比例調(diào)整與superView左邊的距離,且與superView右邊的距離不變。
UIViewAutoresizingFlexibleRightMargin 自動(dòng)按比例調(diào)整與superView的右邊距離,且與superView左邊的距離不變。
UIViewAutoresizingFlexibleTopMargin 自動(dòng)按比例調(diào)整與superView的頂部距離,且與superView底部的距離不變。
UIViewAutoresizingFlexibleBottomMargin 自動(dòng)按比例調(diào)整與superView的底部距離,且與superView頂部的距離不變。
UIViewAutoresizingFlexibleWidth 自動(dòng)按比例調(diào)整寬度。
UIViewAutoresizingFlexibleHeight 自動(dòng)按比例調(diào)整高度。
UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 40)];
[label setAutoresizingMask: UIViewAutoresizingNone]; 控件相對(duì)于父視圖坐標(biāo)值不變
CGRectMake(50, 100, 200, 40)
UIViewAutoresizingFlexibleWidth:控件的寬度隨著父視圖的寬度按比例改變 例如
label寬度為 100 屏幕的寬度為320 當(dāng)屏幕寬度為480時(shí) label寬度 變?yōu)? 100*480/320
2. 小結(jié)
Autoreszing的最常見(jiàn)的實(shí)用場(chǎng)景就是iPhone5的兼容了。
- 比如我們想要設(shè)置tableView的frame,那我們只需要在初始化設(shè)置frame之后將tableView的autoresizingMask設(shè)置為UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight 就行了。
- 另一種比如我們想要一個(gè)view一直停留在其superview的最下方,那么我們?cè)诔跏蓟O(shè)置frame之后只需要將autoresizingMask設(shè)置為UIViewAutoresizingFlexibleTopMargin 就可以了。
autorezingMask是很簡(jiǎn)單的一個(gè)屬性,理解它之后可以讓很多事情變得簡(jiǎn)單。