一践图、VFL介紹
1掺冠、VFL全稱(chēng)是Visual Format Language,翻譯過(guò)來(lái)是“可視化格式語(yǔ)言”
2码党、VFL是蘋(píng)果公司為了簡(jiǎn)化Autolayout的編碼而推出的抽象語(yǔ)言
3德崭、VFL:需有橫豎兩個(gè)方向的約束
橫向: H:
豎向: V:
4、核心思想
約束視圖和視圖之間的關(guān)系來(lái)分配屏幕上的位置
4揖盘、使用autoLayout 必須把translatesAutoresizingMaskIntoConstraints禁用才可以使用
5眉厨、添加約束之前,一定要保證相關(guān)控件都已經(jīng)在各自的父控件上不用再給view設(shè)置frame
二兽狭、VFL示例
1憾股、在水平方向上 canelButton的寬是72,acceptButton寬是50箕慧,它們2個(gè)控件之間的間距是12
H:[cancelButton(72)]-12-[acceptButton(50)]
2服球、在水平方向上 wideView寬度大于等于60point,該約束條件優(yōu)先級(jí)為700(優(yōu)先級(jí)最大值為1000颠焦,優(yōu)先級(jí)越高的約束越先被滿(mǎn)足)
H:[wideView(>=60@700)]
3斩熊、豎直方向上,先有一個(gè)redBox蒸健,其下方緊接一個(gè)高度等于redBox高度的yellowBox
V:[redBox]-[yellowBox(==redBox)]
4座享、(豎線(xiàn)“|” 表示superview的邊緣)水平方向上,F(xiàn)ind距離父view左邊緣默認(rèn)間隔寬度似忧,之后是FindNext距離Find間隔默認(rèn)寬度渣叛;再之后是寬度不小于20的FindField,它和FindNext以及父view右邊緣的間距都是默認(rèn)寬度
H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|
三盯捌、使用步驟
1淳衙、禁用autoResizing
view.translatesAutoresizingMaskIntoConstraints = NO;
2、創(chuàng)建一個(gè)字典饺著,內(nèi)部包含VFL語(yǔ)句中用到的控件箫攀,
NSDictionaryOfVariableBindings(...)
3、使用VFL來(lái)創(chuàng)建約束數(shù)組
format :VFL語(yǔ)句
opts :約束類(lèi)型
metrics :VFL語(yǔ)句中用到的具體數(shù)值
views :VFL語(yǔ)句中用到的控件
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
4幼衰、給父試圖添加數(shù)組約束
addConstraints
一靴跛、認(rèn)識(shí)masonry
1、Masonry是一個(gè)輕量級(jí)的布局框架渡嚣,實(shí)現(xiàn)一種更簡(jiǎn)單的方式用代碼做autolayout布局
2梢睛、擁有自己的描述語(yǔ)法,采用更優(yōu)雅的鏈?zhǔn)秸Z(yǔ)法封裝自動(dòng)布局
3识椰、簡(jiǎn)潔明了并具有高可讀性绝葡,而且同時(shí)支持 iOS 和 Max OS X
4、使用masonry框架做布局腹鹉,從此以后就可以?huà)仐塁GRectMake了
二藏畅、在masonry中能夠添加autolayout約束有三個(gè)方法,
1功咒、mas_makeConstraints 只負(fù)責(zé)新增約束 Autolayout不能同時(shí)存在兩條針對(duì)于同一對(duì)象的約束 否則會(huì)報(bào)錯(cuò)
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
2愉阎、mas_updateConstraints 針對(duì)上面的情況 會(huì)更新在block中出現(xiàn)的約束 不會(huì)導(dǎo)致出現(xiàn)兩個(gè)相同約束的情況
- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
3、mas_remakeConstraints則會(huì)清除之前的所有約束僅保留最新的約束
- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
PS:三種函數(shù)善加利用就可以應(yīng)對(duì)各種情況了
三航瞭、masonry使用示例
1诫硕、用四個(gè)等寬等高的試圖,填充整個(gè)self.view
2刊侯、讓兩個(gè)高度為150的view垂直居中且等寬且等間隔排列 間隔為10(自動(dòng)計(jì)算其寬度)
3章办、實(shí)現(xiàn)動(dòng)畫(huà)