首先小吐槽一下,网络上关于VFL的帖子真心好少啊. 迫不得已遇到需要代码来添加约束的时候,看了若干帖子...准备把最初级的做法和想法记录下来..
/*正文如下*/
http://www.cocoachina.com/industry/20131108/7322.html 最初只看了这篇帖子,仔细看下来应该是可以运用下VFL的..
在此小弟总结一下具体用法,概念和基础理论请参考官方文档,描述的最准确
首先,如果要用vfl或者api来实现AutoLayout的时候,请再脑海中(当然最好是纸上)实现确定的布局..并且保证是正确的..否则可能会crash的!代码里可不会像storyboard中报错的
VFL是通过这个API来实现的:
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
这个API会返回一串约束..具体的参数和返回值可以参考文档.. (千万不要忽略文档的描述,可怜英语差的我), 之后会介绍每个参数怎么用先介绍下那些奇怪符号的意义:
[]: 括起来的是view的变量(先理解成变量吧)
(): 约束中的数值(比如,间距20 就是 (20)当然也是可以使用'>''<'的)
H/V: 很好理解 H就是横向约束,V是纵向约束. 当没有见到这俩东西的话,默认值是H
@: 表示优先级(1000,750,250)新的xcode6中,有三种优先级共参考
|: 表示superview
-: 两个对象之间的距离( [A]-20-[B] ,就是A和B之间相距20.),当两个-之间没有具体数值的时候,则表示标准距离就是8
常用的表示语法差不多就总结这些了把.. 一下是官方的介绍
对于简单的约束行为,请在文档中搜索Visual format language 里面有一些简单的例子,对于一般需求也是可以满足的了.
一些需要用到的API
NSDictionaryOfVariableBindings() 这是一个宏,来绑定一些变量(主要是需要添加约束的view),在其中绑定过的view可以使用到vfl中
NSLayoutFormatOptions:这是上面介绍过的那个方法的opts参数的枚举类型, 文档中一目了然..可以通过名字看出作用不多做说明.
metrics: 主要说明一下这个参数,一个字典类型的参数.用来说明vfl中用到的变量所代表的值.举个栗子, 你需要设置两个view的间距是一个根据屏幕大小来确定的 就需要一个变量.
需要创建一个字典@{@"key":value,.....} ,之后就可以在vfl中使用key来代替你所要的值.
views: 这个很好理解,就是需要加上约束的view嘛.当然这个字典和metrics是一样的.. 在vfl中使用key来代替view.
最后,有了这些基础知识应该就可以完成一个相对不是特别复杂的布局了..官方文档中就有一些简单的栗子来贴个图吧,估计很多像我一样懒的人
看吧很简单...
之后又看到了一个有用的,在这个偷过来...http://blog.csdn.net/easyer2012/article/details/10418755
用代码来描述AutoLayout的时候,用API来的代码量是很大的,熟悉了vfl之后代码自动布局真的舒服了很多..希望大家的手可以在键盘上飞起来!!