iOS自動布局之VisualFormat

2021-08-24 21:00:51 字數 2920 閱讀 2293

vfl是蘋果推出的用來autolayout布局的一門比較形象的語言, 本身為字串,雖然用起來比較麻煩, 但是相比直接使用蘋果的另乙個套布局方案要少寫一些**, 那麼問題來了, github上那麼多自動布局的框架, 簡單又好用, 為什麼要用這麼複雜的**去布局呢, 之前我也這麼想, 直到有一天自己想封裝乙個框架的的時候才發現, 不能處處依賴別人的框架去封裝, 因為這樣的話, 你封裝的框架幾乎沒法用. 舉個例子, 假設你的框架用了afn的2.0版本, 那麼對於使用框架的人來說, 他們專案中如果使用了afn3.0, 那麼肯定出出現一大堆相容問題, 因此對於自己的封裝的框架, 要以原生為主. 廢話不多說 下面總結一下我半天的的學習成果: vfl布局

下面是vfl使用的乙個核心方法

+ (nsarray

<__kindof nslayoutconstraint> *)constraintswithvisualformat:(nsstring *)format

options:(nslayoutformatoptions)opts

metrics:(nullable nsdictionary

*)metrics

views:(nsdictionary

*)views;

該方法一共有四個引數, 接下來將一一講解四個引數的含義及其使用:

format引數: 這個是具體布局的字串,形如@」v:|-10-[view1(50.0)]-20-[view2(50.0)]」稍後再講解此字串的意思;

option引數: 這個引數是乙個可複選的引數, 主要用來布局view的對齊方式;

metrics引數: 這個引數是替換vfl字串中的變數用的, 如果這麼寫:@則第一條中的布局可以替換成下面的寫法:@」v:|-10-[view1(50.0)]-20-[view2(50.0)]」其實就是替換字串中的變數使用;

views引數: 這個引數是用來儲存本條vfl語句中所有用到的view, 可以直接建立字典@對於這個引數蘋果有乙個特定的巨集,nsdictionaryofvariablebindings()因此也可以這樣寫nsdictionaryofvariablebindings(view1, view2);

該方法返回的是乙個裝有約束的陣列集合;可以直接新增到設定約束view的父view上;

如果你對上面的解釋不太理解下面用**具體舉個列子,相信你立馬回恍然大悟

- (void)viewdidload 

- (void)testconstraint views:nsdictionaryofvariablebindings(supview1, supview2)];

nsarray *s1l = [nslayoutconstraint constraintswithvisualformat:left options:0 metrics:nil views:nsdictionaryofvariablebindings(supview1)];

nsarray *v2tc = [nslayoutconstraint constraintswithvisualformat:v2t options:0 metrics:nil views:nsdictionaryofvariablebindings(supview2)];

//一般需要把約束新增到父view上

[self

.view addconstraints:v2tc];

[self

.view addconstraints:s1t];

[self

.view addconstraints:s1l];

}

效果如下圖:

符號含義

|:   表示父檢視

-: 表示距離

v: 表示垂直

h: 表示水平

>=: 表示檢視間距、寬度和高度必須大於或等於某個值

<= :表示檢視間距、寬度和高度必須小宇或等於某個值

== :表示檢視間距、寬度或者高度必須等於某個值

@: 優先順序 最大為 1000

一般用法:

|-[view]-|:                          檢視處在父檢視的左右邊緣內

|-[view] : 檢視處在父檢視的左邊緣

|[view] : 檢視和父檢視左邊對齊

v:[view(100.)] : 設定檢視的高度

h:[view(100.)] : 設定檢視的寬度

|-30.0-[view]-30.0-|: 表示離父檢視 左右間距 30

|-[view(view1)]-[view1]-| :

view和view1檢視寬度一樣,並且在父檢視內

v:|-padding-[imageview]->=0-[button]-padding| : 表示離父檢視的距離為padding,這兩個檢視間距必須大於或等於0並且距離底部父檢視為padding。此時必須對 metrics引數賦值eg. metrics:@;

[wideview(>=60

@700)] :檢視的寬度為至少為60 優先順序為700

最後要注意, h可以忽略, 預設為水平布局 , v必須要寫!!!

好了碼了半天終於大功告成, 希望此部落格對你有幫助, 記得點讚哦~

iOS自動布局之autoresizingi

當uiview的autoresizessubviews是yes時,預設是yes 那麼在其中的子view會根據它自身的autoresizingmask屬性來自動適應其與superview之間的位置和大小。autoresizingmask是乙個列舉型別,預設是uiviewautoresizingnone...

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