首页 > 技术文章 > Visual Format Language(VFL)视图约束

JimmyBright 2015-03-21 16:56 原文

  约束(Constraint)在IOS编程中非常重要,这关乎到用户的直接体验问题。

  IOS中视图约束有几种方式,常见的是在IB中通过Pin的方式手动添加约束,菜单Editor->Pin->...但是我们往往需要更为灵活的操作,那么就要手动编写代码来实现这些操作。

1:长函数方法

  Apple的工程师给我们提供了两种方式,第一种用长函数方法的形式

NSLayoutConstraint(item: <#AnyObject#>, attribute: <#NSLayoutAttribute#>, relatedBy: <#NSLayoutRelation#>, toItem: <#AnyObject?#>, attribute: <#NSLayoutAttribute#>, multiplier: <#CGFloat#>, constant: <#CGFloat#>)

函数很长,但是读起来却一点都不吃力,就好像是一句话那样简单,下面通过实例来说明这个函数的用法。例如我们要实现视图(image)距离左右上下的边距都是20这么一个约束。下面是代码:

1⃣:这行必须添加,所有需要进行约束操作的视图都必须首先确认不自动布局,这里值得注意的是所有约束必须是视图添加到父级视图之后才能开始

2⃣:image的左边距=父View的左边距 + multiplier*constrant//multiplier是倍数,constant是常数也就是说,image的左边距=父View的左边距 + 20

3⃣:image的上边距=父View的上边距 + 20

4⃣:image的右边距= 父View的右边距-20

5⃣:image的下边距=父View的下边距-20

6⃣:在image的父View中添加上这组约束

注意:为什么  4⃣5⃣的常数是减20不是和上面一样的加呢?原因是这样的,屏幕的坐标是从左上角开始计算的,屏幕左上角的坐标为(0,0),往右边X坐标越大,往下边Y坐标越大,如果要求image的右边距和父View距离20,我们知道这时候父View的X坐标肯定要比image的X坐标大20,此时要唯一确定其右边距的约束,只能是父View的X坐标减去image的右边的X坐标,下边距同理

长函数约束和IB的连线及其类似,如果不理解请看下图(图中照片是博主老婆,么么哒

推荐阅读