當uiview
的autoresizessubviews
是yes
時,(預設是yes), 那麼在其中的子view會根據它自身的autoresizingmask
屬性來自動適應其與superview
之間的位置和大小。
autoresizingmask
是乙個列舉型別, 預設是uiviewautoresizingnone
, 也就是不會autoresize:
1234567
89
typedef ns_options(nsuinteger, uiviewautoresizing) ;
這個列舉型別,使用了1 << n
這樣的寫法來定義,代表了它可以複選。如果你不明白為什麼,可以複習下「位運算」。 那麼這些值分別代表什麼意思呢?
其實如何理解這幾個值很簡單,那就是從xib裡面看。 我們在乙個xib檔案中,取消勾選autolayout
,(預設使用autolayout時,autoresizing看不到)。那麼我們可以在布局那一欄看到如何設定autoresizing
.
上圖說明了在xib中設定的這些線條和實際屬性對應的關係,這其中需要注意的是,其中4個margin虛線才代表設定了該值,而width和height是實線代表設定了該值,不能想當然的理解。
這些項分別代表:
autoresizingmask是子檢視的左、右、上、下邊距以及寬度和高度相對于父檢視按比例變化,例如:
uiviewautoresizingnone 不自動調整。
uiviewautoresizingflexibleleftmargin 自動按比例調整與superview左邊的距離,且與superview右邊的距離不變。
uiviewautoresizingflexiblerightmargin 自動按比例調整與superview的右邊距離,且與superview左邊的距離不變。
uiviewautoresizingflexibletopmargin 自動按比例調整與superview的頂部距離,且與superview底部的距離不變。
uiviewautoresizingflexiblebottommargin 自動按比例調整與superview的底部距離,且與superview頂部的距離不變。
uiviewautoresizingflexiblewidth 自動按比例調整寬度。
uiviewautoresizingflexibleheight 自動按比例調整高度。
uilabel* label = [[uilabel alloc] initwithframe:cgrectmake(50, 100, 200, 40)];
[label setautoresizingmask: uiviewautoresizingnone]; 控制項相對于父檢視座標值不變
cgrectmake(50, 100, 200, 40)
uiviewautoresizingflexiblewidth:控制項的寬度隨著父檢視的寬度按比例改變 例如
label寬度為 100 螢幕的寬度為320 當螢幕寬度為480時 label寬度 變為 100*480/320
以上這些都較易理解, 但是autoresizing
還有一些組合場景。那就是組合使用的場景。
autoresizingmask
說明xib預覽效果
none
view的frame不會隨superview的改變而改變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)
view與其superview的上邊距和下邊距的比例維持不變
view與其superview的左邊距和右邊距的比例維持不變(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)
view與其superview的上下左右邊距的比例維持不變
view與其superview的右邊距的比例維持不變, 左邊距和width按比例調整(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)
左邊距、右邊距、寬按比例調整,(右圖的xib中預覽效果與實際效果有差,實際效果是view的上邊距不變)垂直方向是同樣效果,故不列舉
自動調整view的寬和高,保證上下左右邊距不變。如把tableview設定為此屬性,那麼無論viewcontroller的view是多大,都能自動鋪滿
上面並未列舉所有組合場景,但是已經足夠我們理解autoresizing
了。
autoreszing的最常見的實用場景就是iphone5的相容了。比如我們想要設定tableview的frame,那我們只需要在初始化設定frame之後將tableview的autoresizingmask設定為uiviewautoresizingflexiblewidth|uiviewautoresizingflexibleheight
就行了。
另一種比如我們想要乙個view一直停留在其superview的最下方,那麼我們在初始化設定frame之後只需要將autoresizingmask設定為uiviewautoresizingflexibletopmargin
就可以了。
autorezingmask簡單的乙個屬性,理解它之後可以讓很多事情變得簡單。
iOS自動布局之VisualFormat
vfl是蘋果推出的用來autolayout布局的一門比較形象的語言,本身為字串,雖然用起來比較麻煩,但是相比直接使用蘋果的另乙個套布局方案要少寫一些 那麼問題來了,github上那麼多自動布局的框架,簡單又好用,為什麼要用這麼複雜的 去布局呢,之前我也這麼想,直到有一天自己想封裝乙個框架的的時候才發...
IOS自動布局
使用相對布局之後,可以增加開發的速度,一直用frame的方式,混亂。使用相對布局之後,之前以設定frame的方式來取設定view將沒有效果 除了controller的view 同設定frame類似的時,在設定view的約束的時候,也需要制定他的大小和座標,否則,編輯器會提示警告。以實際操作來演示下如...
IOS開發之自動布局 VFL語言
前言 vfl是蘋果公司為了簡化autolayout的編碼而推出的抽象語言。對於純 發燒友,值得我們去學習和了解哦。1 什麼是vfl語言 vfl全稱是visual format language,翻譯過來是 視覺化格式語言 2 vfl使用示例 h cancelbutton 72 12 acceptbu...