Auto Layout 布局约束类

构建布局约束

布局约束(NSLayoutConstraint的实例)定义了关于视图的物理集合特性的规则。布局约束指定了视图的布局方式,以及视图与同一层次结构中其他视图的关系。

NSLayoutAttributeLeft = 1,
NSLayoutAttributeRight,
NSLayoutAttributeTop,
NSLayoutAttributeBottom,
视图的左边、右边、顶部和底部

NSLayoutAttributeLeading,
NSLayoutAttributeTrailing,
视图的前边和后边。在类似英语的场合中,前边和后边对应于左边和右边;在从右到左的场合,特别是在阿拉伯语和希伯来语的情况下,前边和后面对应于左边和右边

NSLayoutAttributeWidth,
NSLayoutAttributeHeight,
视图的宽度和高度

NSLayoutAttributeCenterX,
NSLayoutAttributeCenterY,
视图的中心点。在两个坐标轴的方向上分别表示为centerX和centerY

NSLayoutAttributeLastBaseline,
视图的基线。通常是指在视图的底部上方放置文字的地方

NSLayoutAttributeNotAnAttribute = 0
占位符。当与另一个约束的关系中没有用到某个属性时可以使用该占位符,如果再设置宽度或高度时就会用到这种占位符

NSLayoutRelationLessThanOrEqual = -1,
NSLayoutRelationEqual = 0,
NSLayoutRelationGreaterThanOrEqual = 1,
约束。这种约束允许将属性通过等式(==)和不等式(<=和>=)相互关联


布局约束类

NSLayoutConstraint *wlcs = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:100];
wlcs.priority = 500;
[redView addConstraint:wlcs];

数学规则通过构建NSLayoutConstraint类的实例来创建。

priority:该属性存储约束的优先级值。约束优先级是可读的(有时是可设置的)属性。优先级范围1(最低优先级)到1000(必须的优先级)。
严格来讲,优先级是浮点数:
typedef float UILayoutPriority;
typedef float NSLayoutPriority;
苹果公司提供了不同的平台特有的优先级枚举值。

firstItem与secondItem:这两个属性是指视图。约束可能仅涉及一个视图的属性,也可能涉及两个视图之间的关系。有效约束的第一项总是非nil项。第二项可能是也可能不是nil。

firstAttribute与secondAttribute:这两个属性是约束系统中的“名词”,它们描述视图的对齐矩形的特征,如左边、右边、中心和高度。如果不存在第二项,则将第二个属性设置为NSLayoutAttributeNotAnAttribute。

relation:关系是约束系统中的“动词”,它们指出属性之间如何相互比较:相等(==)、大于等于(>=)、或者小于等于(<=)。
NSLayoutRelationLessThanOrEqual = -1,
NSLayoutRelationEqual = 0,
NSLayoutRelationGreaterThanOrEqual = 1,

multiplier和constant:这两个属性提供了代数元素,增强了约束系统的功能和灵活性。通过这两个属性,可以指出一个视图是另一个视图大小的一半,也可以指出一个视图是将其父视图偏移一定的距离而得到的。这两个属性都是浮点型值,它们对应于构成约束方程的m(乘数)和b(常数)元素。

约束数学:

不管约束是如何创建的,所有约束在本质上都是相等或不等关系,用公式表示如下:

y(关系)m * x + b

R是指y和右边算式的值之间的关系:

y R m * x + b

y和x是表示各种视图属性,m是常数缩放因子,b是常数偏移值。

例如,“视图B的左边应位于视图A的右边15点处”,其关系方程如下图所示:

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


y R m * x + b

firstItem.firstAttribute (relation) secondItem.secondAttribute * multiplier +constant


一元约束:
不是所有约束都引用两个视图。有些约束仅对一个视图进行操作,尤其是那些处理视图尺寸的约束。第二项设置为nil,其属性设置为占位符。
NSLayoutConstraint *wlcs = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:100];

不含视图项的约束是不合法的。无法创建不含视图项的有效约束。

当约束引用两个视图时,只有两种合法情况:要么一个视图时另一个视图的父视图,要么两个视图必须是某种类型的兄弟(即他们必须在同一个窗口下有一个非nil的共同视图祖先)。

安装约束的规则:
添加约束规则
1.对于两个同层级view之间的约束关系,添加到它们的父view上
2.对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上
3.对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上


删除约束:

两个内置方法removeConstraint:和removeConstraints:可用来删除给定视图中的一个约束或者一个约束数组。
假设你构建了一个中心匹配约束,并将该约束添加到了你的视图中。那么,你不能用同样的规则构建约束的另一个版本,并预期调用removeConstraint:方法删除该约束。虽然这两个约束是等价的,但它们不是同一个约束。
要解决这个问题,是在第一次添加约束时将它存储在一个局部变量中,以保存该约束。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、下4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值