iOS自動布局之autoresizingi

2022-08-14 06:00:14 字數 3472 閱讀 8184

uiviewautoresizessubviewsyes時,(預設是yes), 那麼在其中的子view會根據它自身的autoresizingmask屬性來自動適應其與superview之間的位置和大小。

autoresizingmask是乙個列舉型別, 預設是uiviewautoresizingnone, 也就是不會autoresize:

123

4567

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...