VFL 語句

VFL 語句

VFL 語句可以用來寫控件之間的自動布局晚岭,調(diào)用的方法

[NSLayoutConstraint constraintsWithVisualFormat: options: metrics: views:]

參數(shù)

Format: VFL語句

options: 枚舉參數(shù)殊橙,是一個布局方向的參數(shù)彻坛,默認寫0

metrics: 一個字典渔彰,在format中使用了動態(tài)數(shù)據(jù)备图,可以用它來尋找動態(tài)數(shù)據(jù)的值

比如: @"H:|-[button(==width)]-|,表示這個button的寬度為width,而width的值就是字典里面對應的key為width的值媚狰,如果沒有找到這個值,app就會crash.

views: 這是所有vfl語句中使用到的view

上面的例子可以這樣寫:NSDictionaryOfVariableBindings(button)

如果你使用到了多個view阔拳,就可以這樣NSDictionaryOfVariableBindings(button,button1,button3...)崭孤,這個名字也要跟參數(shù)format中的 一 一 對應,缺一不可.

規(guī)范:

一糊肠、"H" "V" 方向

不寫H/V就表示 橫向

"H" 表示橫向 橫向描述關(guān)系

"V" 表示縱向 縱向描述關(guān)系

二辨宠、"[]" 、"|" 货裹、"-" 嗤形、"()" 符號

"[]":表示View

"|":表示superView,用來確定View的上下左右關(guān)系

"-":表示一個間隔 (這個間隔如果是子控件和superView之間的間隔弧圆,那么就是20px赋兵,如果是同一級別的View之間的,那么就是8px)

"()":表示間隔或者控件的大小數(shù)值搔预,也可表示另一個View霹期,里面可以有 == >= <= > < 等大小關(guān)系

例子:

  1. H:|-[_testView]-| 表示距離父視圖的左右兩邊都是20px

  2. V:|-[_testView]-| 表示距離父視圖的上下兩邊都是20px

  3. H:|[_testView] 表示和父控件的左邊界對其,右邊忽略

  4. |-[view1(view2)] 表示view1和view2的寬度相等

  5. H:|-(20)-[_testView(300)]H:|-(20)-[_testView(==300)] 一樣的效果拯田,_testView為300的寬度

  6. H:[_testView(300)] _testView為300的寬度

三历造、@符號

@符號表示優(yōu)先級,如 V:|-50@750-[view(55)]船庇,或者寫到metrics里面更好吭产。具體定義查看UILayoutPriority。有幾個固定的數(shù)值鸭轮。1000表示必須支持臣淤。

四、options

這個看具體需要窃爷,如果是豎排V布局邑蒋,可以添加NSLayoutFormatAlignAllLeft,讓他們左邊對齊吞鸭。

五塞颁、參數(shù) views

views中放置是的接下來要操作的視圖列表硫痰,直接使用 _變量 的方式,不要使用屬性腻窒,因為屬性得到的值可能不是一個變量滩字,而是一個計算結(jié)果造虏。

例如:

NSMutableDictionary *dicViews = [NSMutableDictionary dictionaryWithDictionary:NSDictionaryOfVariableBindings(_testView)];

六御吞、參數(shù) metrics

metrics參數(shù)是在VFL語句中的一些間隔或者大小的變量

NSMutableDictionary *metrics = [NSMutableDictionary dictionaryWithObjectsAndKeys:@(padding), @"padding", nil];

注意

  1. 在VFL語句中使用的視圖變量是使用 [_變量] 的方式,而不能使用[self.屬性]的方式漓藕,否則編譯會報錯

  2. addConstraint(s)前陶珠,view應該已經(jīng)被addSubView上去了

  3. 不必給views寫frame

  4. 給必要的view關(guān)掉AutoresizeingMask自動布局,否則設置會無效

    self.testView.translatesAutoresizingMaskIntoConstraints = NO;

  5. UILabel換行要寫linebreakMode享钞,要寫numberOfLines

  6. UILabel要想換行揍诽,一定要添加preferredMaxLayoutWidth。否則沒法初始化寬度栗竖。

七暑脆、代碼


    self.testView = [[UIView alloc] init];
    
    self.testView.backgroundColor = [UIColor redColor];
    
    //關(guān)閉其自動布局
    self.testView.translatesAutoresizingMaskIntoConstraints = NO;
    
    [self.view addSubview:self.testView];
    
    CGFloat padding = 60.0f;
    
    NSString *HVLCString = @"H:|[_testView]|";
    
    NSString *VVLCString = @"V:|-(padding)-[_testView]-(padding)-|";
    
    
    //在VLC里面涉及到的語句
    NSMutableDictionary *dicViews = [NSMutableDictionary dictionaryWithDictionary:NSDictionaryOfVariableBindings(_testView)];
    
    //在VLC里面涉及到的間隔大小
    NSMutableDictionary *metrics = [NSMutableDictionary dictionaryWithObjectsAndKeys:@(padding), @"padding", nil];
    
    NSArray *HConstraintArray = [NSLayoutConstraint constraintsWithVisualFormat:HVLCString options:NSLayoutFormatAlignAllLeft metrics:metrics views:dicViews];
    
    NSArray *VConstraintArray = [NSLayoutConstraint constraintsWithVisualFormat:VVLCString options:NSLayoutFormatAlignAllLeft metrics:metrics views:dicViews];
    
    [self.view addConstraints:HConstraintArray];
    
    [self.view addConstraints:VConstraintArray];
    
    //不能下面這樣寫,應該將其分開寫
    //[self.view addConstraints:@[HConstraintArray, VConstraintArray]];
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狐肢,一起剝皮案震驚了整個濱河市添吗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌份名,老刑警劉巖碟联,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異僵腺,居然都是意外死亡鲤孵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門想邦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裤纹,“玉大人,你說我怎么就攤上這事丧没∮ソ罚” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵呕童,是天一觀的道長漆际。 經(jīng)常有香客問我,道長夺饲,這世上最難降的妖魔是什么奸汇? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮往声,結(jié)果婚禮上擂找,老公的妹妹穿的比我還像新娘。我一直安慰自己浩销,他們只是感情好贯涎,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慢洋,像睡著了一般塘雳。 火紅的嫁衣襯著肌膚如雪陆盘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天败明,我揣著相機與錄音隘马,去河邊找鬼。 笑死妻顶,一個胖子當著我的面吹牛酸员,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盈包,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沸呐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呢燥?” 一聲冷哼從身側(cè)響起崭添,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叛氨,沒想到半個月后呼渣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡寞埠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年屁置,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仁连。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓝角,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饭冬,到底是詐尸還是另有隱情使鹅,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布昌抠,位于F島的核電站患朱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炊苫。R本人自食惡果不足惜裁厅,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侨艾。 院中可真熱鬧执虹,春花似錦、人聲如沸唠梨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至插龄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間科展,已是汗流浹背均牢。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留才睹,地道東北人徘跪。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像琅攘,于是被迫代替她去往敵國和親垮庐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容