Autoresizing

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.

autoresizing.png

上圖說(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)單。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容