ios 约束(一)

1、什么是约束

    约束就是一系列描述iOS程序视图布局的规则。他们限定了视图之间的关系,也限定了视图的布局形式。使用约束时。我们可以说“这些视图在水平方向上必须对齐”,或是“此视图必须根据另一个视图来调整自身高度,以便与之相符”。约束向开发者提供了一套布局语言,使得可以向视图里添加约束,并以此来描述各视图的空间关系。

    iOS负责通过一套约束满足系统来实现这些布局需求。规则必须有意义。不能说某视图既位于另一个视图左侧,又位于它的右侧。使用约束时的一个难点就是如何保证规则之间总是协调一致的。假如规则之间有冲突,那么开发者将收到明确的通知。Xcode会提供详尽的记录信息来解释具备的错误情况。

    另一个难点在于规则要指定的足够具体才行。如果对界面施加的约束过少,那么可能会产生不符合预期的布局,因为有很多布局方案可供选择。我们可能会要求某视图处在另一个视图右侧,但是假如不指定垂直方向上的规则,那么系统就可能会把右侧这个视图排布在屏幕顶端,而把左侧那个视图排布在屏幕底端。

    有了约束,就可以制作出不依赖于分辨率的应用程序了。对于一款针对4英寸的屏幕的iPhone而制作的应用程序,只要是基于约束的,那么不用修改任何代码,就可以直接运行在5英寸的iPhone上。

    对于需要进行本地化的程序来说,不要为每种界面语言都创建XIB,而是应该采用约束。基于约束的XIB可以使用多种界面语言。

    开发者可以在IB中以可视化的形式来指定约束,也可以在程序源码中以编程的形式来制作约束。

2、约束系统所用的属性

    约束所用的词汇非常有限,就是一些与几何特征有关的属性及关系。属性是约束系统中的“名词”,用来描述视图对齐矩形里的位置。稍后我们会详细解释对其矩形这一概念,而现在大家可以把它看作与视图的框架紧密相关的一个东西。关系是系统里“动词”,用于在属性之间进行比较。

    属性名称描述的是物理特性。约束系统提供了下面这几个“名词”,用来描述视图的相关属性:

    1、left、right、top、bottom——视图对齐矩形的左、右、上、下边界。他们分别对应于视图的最小X值、最大X值、最小Y值以及最大Y值。

    2、leading及trailing——视图对齐矩形的前边沿及后边沿。在从左至右的书写系统里,前边沿就是“左”,后边沿就是“右”。

    3、width与height——视图对齐矩形的宽度和高度。

    4、centerX与centerY——视图对齐矩形的中心点x轴和y轴的座标。

    5、baseline——对齐矩形的基线,通常比bottom属性小一些,而且两者之间的偏移量通常是某个定值。

    关系动词用于比较属性值之间的关系。在约束系统的数学运算中只有三种关系:我们可以限定两个属性必须相等,也可以限定其下界和上界。可以使用下面三种布局关系:

    1、Less-than inequality(小于或等于)——NSLayoutRelationLessThanOrEqual

    2、Equality(等于)——NSLayoutRelationEqual

    3、Greater-than inequality(大于或等于)——NSLayoutRelationGreaterThanOrEqueal

    可能觉得上面这三种关系不会产生太多的布局组合。但实际上,这三种关系可以把排布用户界面时所需的各种布局情况全都涵盖进来。通过这三种关系,我们可以给属性指定具体的值,也可以指定其上限或下限。

约束系统所用的数学算式

    对于所有的约束规则,无论它是如何创建处理的,其本质都可归结为下列形式的等式或不等式:

    y关系m * x + b

    如果掌握了一下数学知识,那么可能会熟悉另一个与上述算式很相似的表述形式,式中的R就表示y与右侧运算值之间的关系:

    yRm * x + b

    y与x都是上面介绍过的那些视图的属性,比方说width、centerY或top。而m则是个表示缩放比例的常数,b是表示偏移量的常数。例如,我们可以规定,“B视图的左界应该位于A视图右界的右方15点处”。那么关系式可以写成:

    B视图的左界 = A视图的右界 + 15

    这是个“等于”关系,偏移量常量(b)是15,缩放倍数或放大倍数是1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章